htaccess删除尾部斜杠会导致重定向循环

时间:2014-02-21 21:58:43

标签: .htaccess trailing-slash

我正在修改我的htaccess文件以实现非www到www(这是有效的)以及删除URL末尾的尾部斜杠,例如:

www.domain.bc.ca/club/ ---> www.domain.bc.ca/club
www.domain.bc.ca/club/index.html/  ---> www.domain.bc.ca/club/index.html

htaccess文件的部分位于下方 - Force www位正在运行;删除尾部斜杠位不是。救命!非常感谢,Amanda。

# Force www.
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^domain\.bc\.ca$ [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
#
# Remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^(.+)/$ /$1 [R=301,L]

1 个答案:

答案 0 :(得分:0)

我会想出来,当你发生这种情况时,我猜你正试图访问一个目录。在您的示例中,“club”似乎是一个目录,当您将/club/重定向到/club时,名为mod_dir的模块会将其重定向回到再次使用尾部斜杠。这有一个很好的理由,因为如果目录缺少尾部斜杠,则会显示目录的内容而不是索引文件。这意味着如果您能够转到www.domain.com/club(没有斜杠),您将看到club目录的所有内容而不是club/index.html文件。

如果您没问题,那么您可以通过将其添加到您的htaccess文件来关闭mod_dir:

DirectorySlash Off

但是你需要在内部将斜杠添加回

DirectorySlash Off

# Force www.
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^domain\.bc\.ca$ [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
#
# Remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^(.+)/$ /$1 [R=301,L]

# Add the slash back
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+[^/])$ /$1/ [L]