我正在修改我的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]
答案 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]