【问题标题】:htaccess remove trailing slash causes redirect loophtaccess 删除尾部斜杠导致重定向循环
【发布时间】:2014-02-21 21:58:42
【问题描述】:

我正在修改我的 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 位正在工作;删除尾部斜杠位不是。帮助!非常感谢,阿曼达。

# 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]

【问题讨论】:

    标签: .htaccess trailing-slash


    【解决方案1】:

    当这种情况发生时,我会冒昧地猜测您正在尝试访问目录。在您的示例中,“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]
    

    【讨论】:

      猜你喜欢
      • 2014-06-21
      • 1970-01-01
      • 2019-03-28
      • 2016-10-29
      • 1970-01-01
      • 1970-01-01
      • 2015-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多