我正在尝试删除 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]
删除所有查询
如果你真的想删除全部查询字符串参数,那么你可以改变条件模式仅一个点(即.
)即可匹配任何字符。