我注意到,RedirectMatch指令在redirect中保留查询string。 也就是说,如果http://www.mydomain.com/someurl?some=query匹配规则,那么它会被redirect到/ whatever / other / url?some = query在新的url中保留查询string。
我怎么告诉它不保存查询string,并redirect到/什么/其他/url没有任何查询string?
这个? 在规则的末尾是显式删除现有查询string的唯一方法。 从文档 :
默认情况下,查询string通过不变。 但是,您可以在包含查询string部分的replacestring中创buildURL。 只需在replacestring中使用问号表示应将以下文本重新注入查询string。 如果要删除现有的查询string,只需使用问号即可结束replacestring。 要合并新旧查询string,请使用[QSA]标志。
http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html
没有关于如何避免查询string被追加的文档,虽然QSA选项的存在意味着Apache可能会有一个类似于nginx的行为 – 一个尾随的? 将确保没有以前的查询string被追加。
顺便说一句,如果这在Apache中不起作用,我衷心邀请你试试nginx 。 除了具有优异的性能外,还具有优秀的文档和易于configuration, 只是简单地使旧的string消失,而不会导致产生redirect的空白问号。 所以,它基本上只适用于nginx,整个行为,如果甚至正式logging,所以你不必跳过任何箍。
http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#rewrite
如果replacestring包含新的请求参数,则先前的请求参数将附加在它们后面。 如果这是不希望的,在replacestring的末尾添加一个问号可以避免添加它们