我有这样的重写:
RewriteRule /products.php?id=123&t=12345 /product/New-Product-Name
如果我打开RewriteLog ging,然后翻转关卡,就会得到以下结果:
applying pattern '/products.php?id=123&t=12345' to uri '/products.php'
为什么不查看完整的uri(包括查询string)?
从mod_rewrite文档:
注意:查询string
模式不会与查询string匹配。 相反,您必须使用带有
%{QUERY_STRING}variables的RewriteCond。 但是,您可以在replacestring中创buildURL,其中包含查询string部分。 只需在replacestring中使用问号,表示应将下面的文本重新注入查询string中。 如果要删除现有的查询string,只需使用问号即可结束replacestring。 要将新的查询string与旧的查询string合并,请使用[QSA]标志。
总之,你需要使用RewriteCond和RewriteRule的组合; 也许是这样的:
RewriteCond %{QUERY_STRING} ^id=123&t=12345$ RewriteRule /products.php /product/New-Product-Name
更新 :我testing了这个,并且按照我所描述的那样工作。 它redirect到
/product/New-Product-Name?id=123&t=12345 。
如果你想查询string?id=123&t=12345被删除,添加一个? 到RewriteRule ,如:
RewriteRule /products.php /product/New-Product-Name?
这将redirect到
/product/New-Product-Name
我想象有一个更好的方式来使用RewriteMap来做到这一点,但这可能会做一次性的。