RedirectMatch:如何避免保留查询字符串

RedirectMatch:如何避免保留查询字符串

我注意到 RedirectMatch 指令在重定向过程中保留了查询字符串。也就是说,如果http://www.mydomain.com/someurl?some=query匹配规则,然后重定向到 /whatever/other/url?some=query 并在新的 url 中保留查询字符串。

我如何告诉它不要保留查询字符串并仅重定向到 /whatever/other/url 而不保留任何查询字符串?

答案1

?规则末尾的 是明确删除现有查询字符串的唯一方法。从文档

默认情况下,查询字符串会原封不动地传递。但是,您可以在包含查询字符串部分的替换字符串中创建 URL。只需在替换字符串中使用问号即可指示应将以下文本重新注入查询字符串。当您想要删除现有查询字符串时,只需用问号结束替换字符串即可。要合并新旧查询字符串,请使用 [QSA] 标志。

答案2

http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html

没有关于如何避免附加查询字符串的文档,尽管该QSA选项的存在表明 Apache 可能有类似的行为nginx——尾随?将确保没有附加先前的查询字符串。

顺便说一句,如果这在 Apache 中不起作用,我诚挚地邀请您尝试nginx。除了具有出色的性能外,它还具有出色的文档和易于配置的特性,并且附加一个?只会使旧字符串消失,也不会导致生成的重定向上出现空问号。因此,它基本上只在 nginx 中起作用,并且整个行为甚至有官方文档记录,因此您不必费尽心机。

http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#rewrite

如果替换字符串包含新的请求参数,则先前的请求参数将附加在其后。如果不希望出现这种情况,请在替换字符串末尾放置一个问号,以避免附加这些参数

相关内容