【问题标题】:Remove multiple trailing slashes in root using htaccess使用 htaccess 删除 root 中的多个尾随斜杠
【发布时间】:2017-10-25 12:11:13
【问题描述】:

我的 htaccess 文件中有一条规则可以从 url 中删除任何多余的尾部斜杠,这适用于带有超过 1 个尾部斜杠的子目录。但是它不适用于根目录;我需要它来做。

例如。

http://www.example.com/test//// 重定向到http://www.example.com/test/

http://www.example.com///需要重定向到http://www.example.com

关于我需要添加什么的任何想法?干杯。

RewriteCond %{REQUEST_URI} ^(.*?)(?:/){2,}$
RewriteRule . %1/ [R=301,L]

【问题讨论】:

  • 很难说没有看到当前代码...
  • 尝试清理浏览器缓存。

标签: .htaccess


【解决方案1】:

对于删除REQUEST_URI 中的多个斜线任何地方,此规则效果最佳:

RewriteEngine On

RewriteCond %{THE_REQUEST} \s[^?]*//
RewriteRule ^.*$ /$0 [R=301,L,NE]

它利用mod_rewrite 引擎本身将所有多个正斜杠转换为RewriteRule 模式中的单个斜杠这一事实。我们使用RewriteCond %{THE_REQUEST} 来确保原始REQUEST_URI 包含多个斜杠。

【讨论】:

  • 非常好的解决方案!
【解决方案2】:

尝试:

RewriteCond %{REQUEST_URI} ^(.*?)//+$
RewriteRule ^ %1/ [R=301,L]

【讨论】:

  • 我不推荐这样做,因为它会在两个以上的斜杠上生成一个以上的重定向
  • 不,因为//+more then one slash
【解决方案3】:

您的 htaccess 效果很好,您可以在下面的链接上进行测试

https://htaccess.madewithlove.be/

因此,您需要确保使用 Chrome 隐身窗口或使用以下方式进行测试

curl -v http://example.com////

我通常更喜欢 curl,因为我知道它总是会从服务器给出新的响应

【讨论】:

    【解决方案4】:

    你只需要两条规则来匹配两个不同的模式

    RewriteCond %{REQUEST_URI} ^(?:/){2,}$
    RewriteRule . / [R=301,L]
    
    RewriteCond %{REQUEST_URI} ^(.*?)(?:/){2,}$
    RewriteRule . %1/ [R=301,L]
    

    【讨论】:

      猜你喜欢
      • 2011-02-20
      • 1970-01-01
      • 1970-01-01
      • 2012-01-17
      • 2022-01-23
      • 2015-01-15
      • 1970-01-01
      • 1970-01-01
      • 2011-12-09
      相关资源
      最近更新 更多