Apache 重定向 - 删除所有查询

Apache 重定向 - 删除所有查询

我正在尝试删除 URL 中的所有查询:

  • https://api.myserver.com/image.png?arg=0应该成为
  • https://api.myserver.com/image.png

我用的是这个:

RewriteCond      %{QUERY_STRING}    ^arg=0$
RewriteRule      (.*)               $1?     [R=permanent]

结果如下:

https://api.myserver.com/home/usrn32/domains/myserver.com/public_html/image.png

因此删除了参数,但路径是绝对路径而不是相对路径。另外,我想捕获所有arg数字,而不仅仅是0

如何?

答案1

看起来这是目录上下文。在这种情况下,$1反向引用不包含斜杠前缀(因为 URL 路径RewriteRule 图案匹配不包含斜杠前缀),因此它被视为相对的路径替换。mod_rewrite 将目录前缀(即/home/usrn32/domains/myserver.com/public_html/)添加回代换几时相对的

您需要在替代(或使用RewriteBase指令),这样它就不再相对的。 例如:

RewriteRule      (.*)               /$1?     [R=permanent,L]

此外,您可能希望包含标志L,以防止进一步重写(如果有的话)。

另外,我想捕获所有参数数字,而不仅仅是 0。

修改您的条件模式( ^arg=0$) 改为^arg=\d+$(1 位或多位数字)。

总之:

RewriteCond      %{QUERY_STRING}    ^arg=\d+$
RewriteRule      (.*)               /$1?     [R=permanent,L]

删除所有查询

如果你真的想删除全部查询字符串参数,那么你可以改变条件模式仅一个点(即.)即可匹配任何字符。

相关内容