带有Querystring的Apache RewriteRule

我有这样的重写:

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]标志。

总之,你需要使用RewriteCondRewriteRule的组合; 也许是这样的:

 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来做到这一点,但这可能会做一次性的。