我有一个像这样的重写:
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 (包括查询字符串)?
答案1
来自文档mod_rewrite
:
注意:查询字符串
这图案将不会与查询字符串匹配。相反,您必须将
RewriteCond
和%{QUERY_STRING}
变量一起使用。但是,您可以在替换字符串中创建包含查询字符串部分的 URL。只需在替换字符串中使用问号,即可指示应将以下文本重新注入查询字符串。当您想要删除现有查询字符串时,只需用问号结束替换字符串。要将新查询字符串与旧查询字符串合并,请使用标志[QSA]
。
简而言之,您需要使用RewriteCond
和的组合RewriteRule
;也许是类似的东西:
RewriteCond %{QUERY_STRING} ^id=123&t=12345$
RewriteRule /products.php /product/New-Product-Name
更新:我测试了它,它按照我描述的方式工作。它会重定向到
/product/New-Product-Name?id=123&t=12345
。
?id=123&t=12345
如果要删除查询字符串,请将 添加?
到RewriteRule
,例如:
RewriteRule /products.php /product/New-Product-Name?
将重定向至
/product/New-Product-Name
我在想象有更好的方法来做到这一点RewriteMap
,但这可能只适用于一次性的事情。