在 Magento 2 中的所有 URL 中添加尾部斜杠

问题描述 投票:0回答:2

看起来好像 Magento 2 默认删除了尾部斜杠。有什么办法可以改变这种情况吗?我试图在 .htaccess 文件中找到重定向该代码的代码。每当我添加以下代码时,都会有一个大的重定向链导致网站速度变慢。

RewriteCond %{REQUEST_FILENAME} !-f 重写规则 ^(.*[^/])$ /$1/ [L,R]

我希望所有网址末尾都有斜杠。 https://www.example.com/category/。目前,它们重定向到非尾随斜杠 https://www.example.com/category

magento magento2
2个回答
0
投票

您可以尝试以下类别/产品 URL:

商店 --> 设置 --> 配置 --> 目录 --> 目录 --> 搜索引擎优化 --> 类别 URL 后缀

将值设置为:

/

首先在开发环境中尝试。


0
投票

您可以使用此解决方案附加尾部斜杠,如果您想跳过特定模块以在这两种情况下附加尾部斜杠,您可以根据您的要求使用此代码更新逻辑。

首先创建事件文件。

app/code/[自定义模块]/[模块名称]/etc/frontend/events.xml

<event name="controller_action_predispatch">
        <observer name="add_slash_in_url" instance="[Custom_Module]/[Module_Name]\Observer\PredispathActionControllerObserver" />
    </event>

创建观察者文件。 应用程序/代码/[自定义模块]/[模块名称]/Observer/PredispathActionControllerObserver.php

<?php
namespace [Custom_Module]\[Module_Name]\Observer;

use Magento\Framework\App\ActionFlag;
use Magento\Framework\Event\ObserverInterface;
use Magento\Framework\UrlInterface;

/**
 * Class Predispath Frontend Action Controller Observer
 */
class PredispathActionControllerObserver implements ObserverInterface
{
    /**
     * @var UrlInterface
     */
    protected $urlInterface;

    /**
     * @var \Magento\Framework\App\ActionFlag
     */
    protected $actionFlag;

    /**
     * @var []
     */
    protected $skipModule = [
        'cms',
        'cms_page',
        'cms_block',
        'catalog'
    ];

    /**
     * @param UrlInterface $urlInterface
     * @param ActionFlag $actionFlag
     */
    public function __construct(
        UrlInterface $urlInterface,
        ActionFlag $actionFlag
    ) {
        $this->actionFlag = $actionFlag;
        $this->urlInterface = $urlInterface;
    }

    /**
     * Execute Observer
     *
     * @param  \Magento\Framework\Event\Observer $observer
     * @throws \Magento\Framework\Exception\NoSuchEntityException
     * @SuppressWarnings(PHPMD.CyclomaticComplexity)
     */
    public function execute(\Magento\Framework\Event\Observer $observer)
    {
        $currentUrl = $this->urlInterface->getCurrentUrl();
        $result = explode('?', $currentUrl);
        $result[0] = trim($result[0], '/') . '/';
        $urlSlash = implode('?', $result);

        if ($urlSlash != $currentUrl) {
            $controller = $observer->getEvent()->getData('controller_action');
            if (empty($controller) || !is_object($controller) || !$controller ||
                !method_exists($controller, 'getRequest') ||
                empty($controller->getRequest()) || !$controller->getRequest() ||
                empty($controller->getRequest()->getModuleName()) || !$controller->getRequest()->getModuleName() ||
                in_array($controller->getRequest()->getModuleName(), $this->skipModule)) {
                return;
            }
            if ($controller->getRequest()->isXmlHttpRequest()
                || $controller->getRequest()->isPost()
            ) {
                return;
            }
            $this->actionFlag->set('', \Magento\Framework\App\ActionInterface::FLAG_NO_DISPATCH, true);
            $controller->getResponse()->setRedirect($urlSlash, 301)->sendResponse();
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.