从查询字符串 Apache 中删除尾部斜杠

Posted

技术标签:

【中文标题】从查询字符串 Apache 中删除尾部斜杠【英文标题】:Remove trailing slashes from Query String Apache 【发布时间】:2016-10-19 06:20:23 【问题描述】:

我在尝试从 apache 中的查询字符串末尾删除尾部斜杠时遇到问题。

我现在有以下重写规则来使 URL 和查询字符串全部小写:

   RewriteEngine On
   RewriteMap lc int:tolower
   RewriteCond %REQUEST_URI ^[^A-Z]*[A-Z].* [OR]
   RewriteCond %QUERY_STRING ^[^A-Z]*[A-Z].*
   RewriteRule ^ $lc:%REQUEST_URI?$lc:%QUERY_STRING [L,R=301]

我已尝试添加:

RewriteCond %QUERY_STRING (.+)/$
RewriteRule ^ %1 [R=301,L]

但它破坏了网站。我一直在寻找一种方法来做到这一点,但还没有提出任何解决方案。我尝试了this post 的答案,但没有奏效。

我需要这样做的原因是因为我们的应用程序防火墙在 url 中查找“ID”,如果后面有任何非字母数字字符,那么它会阻止请求。防火墙是在 Apache 请求到达服务器后实施的。

希望对 Apache Rewrite 规则有更多经验的人可以帮助我。提前致谢。

【问题讨论】:

【参考方案1】:

要从查询字符串中删除尾部斜杠,您可以使用以下规则:

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

确保这是您的 .htaccess 中RewriteEngine On 行下方的第一条规则。

【讨论】:

以上是关于从查询字符串 Apache 中删除尾部斜杠的主要内容,如果未能解决你的问题,请参考以下文章

从批处理文件输入中删除尾部斜杠

从每个参数中删除尾部斜杠的最简单方法是啥?

从 Magento URL 中删除尾部斜杠

从url中删除尾部斜杠

使用 .htaccess 删除尾部斜杠

从 IIS 中嵌套应用程序的虚拟目录根目录中删除尾部斜杠