【问题标题】:How to create RewriteRule where the request URL has query string如何在请求 URL 具有查询字符串的情况下创建 RewriteRule
【发布时间】:2011-11-07 20:50:52
【问题描述】:
我觉得我真的很接近了,但我不能完全让这个 Apache RewriteRule 正常工作。
我有一个类似 http://mysite.com/product.php?view=true&ID=123 的 URL,我想重定向到 http://mysite.com/some-page。但是如果产品 ID=456,那么我想将其重定向到 http://mysite.com/some-other-page。
所以我不需要为我的目标 URL 保留查询字符串,但我确实关心它在请求中的含义,因为这将决定我将用户重定向到的位置。我一直在努力理解如何使用 mod_rewrite %{QUERY_STRING} 参数,但我就是无法让它工作。
提前感谢您的帮助!
【问题讨论】:
标签:
apache
.htaccess
mod-rewrite
url-rewriting
query-string
【解决方案2】:
像这样:
RewriteEngine On
RewriteCond %{QUERY_STRING} =view=true&ID=123
RewriteRule ^product\.php$ /some-page? [R=301,L]
RewriteCond %{QUERY_STRING} =view=true&ID=456
RewriteRule ^product\.php$ /some-other-page? [R=301,L]
您需要匹配^product.php 以及查询字符串。我确实匹配了 FULL EXACT 查询字符串(view=true 和 ID=123 都需要以精确的顺序出现)。如果您只需要部分匹配(例如仅ID=123),则将=view=true&ID=123 替换为ID=123。
注意 ? 在新 URL 的末尾——这是为了摆脱现有的查询字符串。没有它/product.php?view=true&ID=123 将被重定向为/some-page?view=true&ID=123。
我使用了 301 永久重定向。您可能希望将其更改为 302 或您认为更适合您的任何其他重定向代码。
这将被放置在网站根文件夹中的 .htaccess 中。如果放置在其他地方,可能需要进行一些小的调整。