non-www 重定向和尾部斜线的 htaccess 问题
htaccess issue with non-www redirect and trailing slash
我目前将所有流量重定向到我网站的 www.
版本。但是,在检查特定文件夹中的重定向链接时,我注意到一些可能/可能不是问题的东西。
基本上,如果我在 www.example.com/example/examplepage/
上进行 header 检查,它会显示 200 OK。
如果我检查 www.example.com/example/examplepage
(没有尾随 /
),它会按原样显示 301 重定向到上面。
但是,如果我检查 example.com/example/examplepage/
(没有 www
),它会重定向到 www.example.com/example/examplepage.php
... 然后重定向到 www.example.com/example/examplepage/
(正确的页面)。
我希望这是有道理的?
a) 这样可以吗?
b) 我是否在 .htaccess
中遗漏了什么?
RewriteOptions inherit
RewriteEngine On
RewriteCond %{THE_REQUEST} ^.*/index.htm
RewriteRule ^(.*)index.htm$ http://www.example.com/ [R=301,L]
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule (.*) http://www.example.com/ [R=301,L]
RewriteCond %{THE_REQUEST} \.php
RewriteRule ^tips/([^.]+)\.php$ http://www.example.com/example// [R=301,L]
RewriteRule ^tips/([^.]+[^./])$ http://www.example.com/example// [R=301,L]
RewriteRule ^(tips/[^.]+)/$ /.php [L]
请注意:上面的 PHP 规则是为特定文件夹的 "hide" .php
扩展创建的(不希望它们隐藏在其他任何地方)。
我设法解决了(好吧,好吧 - 幸运的猜测),但不管怎样,它现在似乎可以工作了。我调整了上面的规则顺序以显示以下内容:
RewriteEngine On
RewriteCond %{THE_REQUEST} \.php
RewriteRule ^tips/([^.]+)\.php$ http://www.example.com/tips// [R=301,L]
RewriteRule ^tips/([^.]+[^./])$ http://www.example.com/tips// [R=301,L]
RewriteCond %{THE_REQUEST} ^.*/index.htm
RewriteRule ^(.*)index.htm$ http://www.example.com/ [R=301,L]
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule (.*) http://www.example.com/ [R=301,L]
RewriteRule ^(tips/[^.]+)/$ /.php [L]
这现在导致:
- http://example.com/tips/examplepage.php(和 www 版本)
- http://example.com/tips/examplepage - 没有尾部斜杠(和 www 版本)
所有最终重定向到 www.example.com/tips/examplepage/(带尾部斜杠)
它还确保 www.example.com/examplepage.php(不在 "tips" 文件夹中)保持其扩展名。
它还会将 index.htm 重写为 /(同时使用 www 和非 www)。
我已尝试在此处添加尽可能多的细节,希望它能防止其他人浪费整个周末的时间拔头发、变白等...
我目前将所有流量重定向到我网站的 www.
版本。但是,在检查特定文件夹中的重定向链接时,我注意到一些可能/可能不是问题的东西。
基本上,如果我在 www.example.com/example/examplepage/
上进行 header 检查,它会显示 200 OK。
如果我检查 www.example.com/example/examplepage
(没有尾随 /
),它会按原样显示 301 重定向到上面。
但是,如果我检查 example.com/example/examplepage/
(没有 www
),它会重定向到 www.example.com/example/examplepage.php
... 然后重定向到 www.example.com/example/examplepage/
(正确的页面)。
我希望这是有道理的?
a) 这样可以吗?
b) 我是否在 .htaccess
中遗漏了什么?
RewriteOptions inherit
RewriteEngine On
RewriteCond %{THE_REQUEST} ^.*/index.htm
RewriteRule ^(.*)index.htm$ http://www.example.com/ [R=301,L]
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule (.*) http://www.example.com/ [R=301,L]
RewriteCond %{THE_REQUEST} \.php
RewriteRule ^tips/([^.]+)\.php$ http://www.example.com/example// [R=301,L]
RewriteRule ^tips/([^.]+[^./])$ http://www.example.com/example// [R=301,L]
RewriteRule ^(tips/[^.]+)/$ /.php [L]
请注意:上面的 PHP 规则是为特定文件夹的 "hide" .php
扩展创建的(不希望它们隐藏在其他任何地方)。
我设法解决了(好吧,好吧 - 幸运的猜测),但不管怎样,它现在似乎可以工作了。我调整了上面的规则顺序以显示以下内容:
RewriteEngine On
RewriteCond %{THE_REQUEST} \.php
RewriteRule ^tips/([^.]+)\.php$ http://www.example.com/tips// [R=301,L]
RewriteRule ^tips/([^.]+[^./])$ http://www.example.com/tips// [R=301,L]
RewriteCond %{THE_REQUEST} ^.*/index.htm
RewriteRule ^(.*)index.htm$ http://www.example.com/ [R=301,L]
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule (.*) http://www.example.com/ [R=301,L]
RewriteRule ^(tips/[^.]+)/$ /.php [L]
这现在导致:
- http://example.com/tips/examplepage.php(和 www 版本)
- http://example.com/tips/examplepage - 没有尾部斜杠(和 www 版本)
所有最终重定向到 www.example.com/tips/examplepage/(带尾部斜杠)
它还确保 www.example.com/examplepage.php(不在 "tips" 文件夹中)保持其扩展名。
它还会将 index.htm 重写为 /(同时使用 www 和非 www)。
我已尝试在此处添加尽可能多的细节,希望它能防止其他人浪费整个周末的时间拔头发、变白等...