带有查询字符串的 Apache RewriteRule

带有查询字符串的 Apache RewriteRule

我有一个像这样的重写:

RewriteRule /products.php?id=123&t=12345 /product/New-Product-Name

如果我打开RewriteLogging,并调高级别,我会得到以下结果:

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,但这可能只适用于一次性的事情。

相关内容