在Magento 2中为所有URL添加尾随斜杠

7eumitmz  于 12个月前  发布在  其他
关注(0)|答案(3)|浏览(167)

Magento 2默认情况下似乎会删除尾部斜杠。有什么方法可以改变吗?我试图在.htaccess文件中找到重定向该代码的代码。每当我添加以下代码时,都会出现一个大型重定向链,导致网站变慢。
RewriteCond %{REQUEST_FILENAME}!-f RewriteRule ^(.*[^/])$ /$1/ [L,R]
我想在我所有的网址结尾的尾随斜杠。https://www.example.com/category/。目前,他们重定向到非尾随斜杠https://www.example.com/category

liwlm1x9

liwlm1x91#

您可以尝试以下类别/产品URL:
商店-->设置-->配置-->目录-->目录-->搜索引擎优化-->类别URL后缀
将值设置为:
/
首先在开发环境中尝试一下。

icomxhvb

icomxhvb2#

您可以使用此解决方案来附加一个尾随斜杠,如果您想跳过特定模块以附加一个尾随斜杠,在这两种情况下,您都可以根据您的需求使用此代码更新逻辑。
首先创建事件文件。

app/code/[Custom_Module]/[Module_Name]/etc/frontend/events.xml

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

字符串
创建观察者文件。app/code/[Custom_Module]/[Module_Name]/Observer/PredispathController Observer.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();
        }
    }
}

y1aodyip

y1aodyip3#

这里有两种方法来解决你的问题:
1.您可以尝试将以下代码添加到.htaccess文件中:
RewriteCond %{REQUEST_FILENAME}!-f RewriteRule ^(.*[^/])$ /$1/ [L,R=301]

  1. Magento 2提供了一个添加尾随斜杠的配置设置。在管理面板中,转到Stores > Configuration > General > Web > Search Engine Optimization并适当设置“将商店代码添加到URL”和“自动重定向到基础URL”选项。

相关问题