【问题标题】:trailing slash removal redirection not working in .htaccess apache尾部斜杠删除重定向在 .htaccess apache 中不起作用
【发布时间】:2019-05-16 15:38:27
【问题描述】:

我正在做一个项目,在该项目中我已将旧站点迁移到新站点。 SEO 仍在为旧网站工作,所以我在我的 yii2 应用程序中写了规则

'rules' => [
                "<year:\d{4}>/<number1:\d{2}>/<number2:\d{2}>/<slug>"=>'video/parse',

这个 yii2 重定向对于不以斜杠结尾的 URL 可以正常工作。但是这条规则对于尾随的斜杠 URL 是失败的。为了解决这个问题,我尝试通过 apache 重定向。为此,我编写了这段代码

<VirtualHost *:80>
RewriteEngine on

RewriteCond %{SERVER_NAME} =mydomain.org
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [R=301,L]

问题 1:
当我点击http://example.org/2017/09/10/slug/ 时,它会重定向到http://example.org//2017/09/10/slug/,因为您可以看到在域名后添加了一个额外的斜杠。
问题2:
当我点击https://example.org/2017/09/10/slug/ 时,它无论如何都不会被重定向。

问题:
1. 我们如何重定向斜杠?
2. 如何让 https 的重定向生效?

【问题讨论】:

    标签: apache .htaccess redirect yii2


    【解决方案1】:

    您可能应该使用UrlNormalizer 进行此类重定向:

    'urlManager' => [
        // ...
        'normalizer' => [
            'class' => yii\web\UrlNormalizer::class,
            // you can use temporary redirection instead of permanent for tests
            // 'action' => UrlNormalizer::ACTION_REDIRECT_TEMPORARY,
        ],
    ],
    

    您可以在this guide article 中阅读有关 URL 规范化的更多信息。

    【讨论】:

      【解决方案2】:

      您面临的问题是您实际上没有使用您声称的动态配置文件(“.htaccess”)(我假设,因为VirtualHost 指令在那里无效) .并且因为RewriteRule 逻辑在真正的 http 服务器配置文件中使用时适用于 absolute 路径,而不是在动态配置文件中使用时适用于 relative 路径。实际上,这是非常突出的记录。逻辑上的差异会导致您的捕获(与$1 参考一起重复使用)包含一个实际的前导斜杠。

      所以你需要做的就是改变你的规则到这个更强大的版本:

      RewriteRule ^/?(.*)/$ /$1 [R=301,L]
      

      前导^/? 允许在具有相同逻辑的两个版本的配置文件中同样使用未修改的规则。我想,原因应该很清楚。

      最好先从 302 临时重定向开始,稍后再将其更改为 301 永久重定向,前提是您确定一切都已正确设置。这样可以防止在尝试时出现缓存问题...

      一般来说:您应该始终喜欢将此类规则放在 http 服务器主机配置中,而不是使用动态配置文件(“.htaccess”)。这些动态配置文件增加了复杂性,通常是导致意外行为的原因,难以调试,而且它们确实减慢了 http 服务器的速度。它们仅在您无法访问真正的 http 服务器主机配置(阅读:非常便宜的服务提供商)或坚持编写自己的规则的应用程序(这是一个明显的安全噩梦)的情况下作为最后一个选项提供。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-28
        • 2016-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多