非www重定向和尾部斜杠的htaccess问题

时间:2017-05-01 11:34:23

标签: apache .htaccess redirect mod-rewrite slash

我目前将所有流量重定向到我网站的www.版本。但是,在检查特定文件夹中的重定向链接时,我发现了可能/可能不是问题的内容。

基本上,如果我对www.example.com/example/examplepage/进行标题检查,则显示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/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule (.*) http://www.example.com/$1 [R=301,L]


RewriteCond %{THE_REQUEST} \.php
RewriteRule ^tips/([^.]+)\.php$ http://www.example.com/example/$1/ [R=301,L]

RewriteRule ^tips/([^.]+[^./])$ http://www.example.com/example/$1/ [R=301,L] 

RewriteRule ^(tips/[^.]+)/$ /$1.php [L] 

请注意:上面的PHP规则创建于"隐藏"特定文件夹上的.php个扩展名(并不希望它们隐藏在其他任何位置)。

1 个答案:

答案 0 :(得分:0)

我设法解决了(嗯,好吧 - 幸运的猜测),但无论哪种方式,它似乎现在都有效。我已经调整了以上规则顺序以显示以下内容:

RewriteEngine On
RewriteCond %{THE_REQUEST} \.php
RewriteRule ^tips/([^.]+)\.php$ http://www.example.com/tips/$1/ [R=301,L]
RewriteRule ^tips/([^.]+[^./])$ http://www.example.com/tips/$1/ [R=301,L] 
RewriteCond %{THE_REQUEST} ^.*/index.htm
RewriteRule ^(.*)index.htm$ http://www.example.com/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule (.*) http://www.example.com/$1 [R=301,L]

RewriteRule ^(tips/[^.]+)/$ /$1.php [L] 

现在导致:

  1. http://example.com/tips/examplepage.php(和www版本)
  2. http://example.com/tips/examplepage - 没有斜杠(和www版本)
  3. 所有终于重定向到www.example.com/tips/examplepage/(带斜杠)

    它还可以确保www.example.com/examplepage.php(不在“tips”文件夹中)保留其扩展名。

    它还将index.htm重写为/(使用www和非www)。

    我试图在这里添加尽可能多的细节,希望它可以防止其他人浪费整个周末拉头发,变灰等......