【问题标题】:Incorrect redirection from .htaccess来自 .htaccess 的错误重定向
【发布时间】:2017-07-14 13:41:51
【问题描述】:

我想将所有non-www 和所有non-https 重定向到https://www URL。

我有一个包含以下代码的 .htaccess:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI}$1 [R=301,L]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI}$1

这适用于根路径:

OK https://www.mywebsite.com => https://www.mywebsite.com
OK http://mywebsite.com => https://www.mywebsite.com
OK https://mywebsite.com => https://www.mywebsite.com
OK http://www.mywebsite.com => https://www.mywebsite.com

但是当我尝试进入子文件夹时存在(某种)错误:

OK https://www.mywebsite.com/tmp => https://www.mywebsite.com/tmp
KO https://mywebsite.com/tmp => https://www.mywebsite.com/tmp/tmp
KO http://www.mywebsite.com/tmp => https://www.mywebsite.com/tmp/tmp
KO http://mywebsite.com/tmp => https://www.mywebsite.com/tmp/tmp

如您所见,再次附加子文件夹并给出 404 错误。

如何修复我的 .htaccess 规则以获得预期的重定向?

非常感谢

【问题讨论】:

    标签: php apache .htaccess redirect mod-rewrite


    【解决方案1】:

    问题是使用%{REQUEST_URI}$1,它在REQUEST_URI 末尾添加捕获值,即URI。

    另外,作为一种优化,您可以像这样将两个规则合并为一个:

    RewriteEngine On
    
    RewriteCond %{HTTP_HOST} !^www\. [NC,OR]
    RewriteCond %{HTTPS} off
    RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
    RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L,NE]
    

    确保在测试此更改之前清除浏览器缓存。

    【讨论】:

      猜你喜欢
      • 2018-03-20
      • 2010-11-18
      • 1970-01-01
      • 2020-02-15
      • 1970-01-01
      • 2014-04-23
      • 2012-03-04
      • 1970-01-01
      • 2018-03-15
      相关资源
      最近更新 更多