如何在请求URL具有查询字符串的位置创建RewriteRule

时间:2011-08-31 18:32:18

标签: apache .htaccess mod-rewrite url-rewriting query-string

我觉得我非常接近,但我无法让这个Apache RewriteRule正常工作。

我有一个类似http://mysite.com/product.php?view=true&ID=123的网址,我想重定向到http://mysite.com/some-page。但如果产品ID = 456,那么我想将其重定向到http://mysite.com/some-other-page。< / p>

所以我不需要保留我的目标网址的查询字符串,但我确实关心请求中的等价,因为这将决定我将用户重定向到的位置。我一直在努力尝试理解如何使用mod_rewrite %{QUERY_STRING}参数,但我无法让它工作。

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

这应该有所帮助。

RewriteCond %{QUERY_STIRNG} id=456
RewriteRule .* /some-other-page? [R,L]

有关Manipulating the Query String的更多信息。

答案 1 :(得分:0)

像这样:

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]
  1. 您需要匹配^product.php以及查询字符串。我确实匹配了完整的查询字符串(view=trueID=123都需要以精确的顺​​序出现)。如果您只需要部分匹配(例如仅限ID=123),请将=view=true&ID=123替换为ID=123

  2. 请注意新网址末尾的? - 这是为了摆脱现有的查询字符串。如果没有,/product.php?view=true&ID=123将被重定向为/some-page?view=true&ID=123

  3. 我使用过301永久重定向。您可能希望将其更改为302或您认为更适合您的其他重定向代码。

  4. 这是放在网站根文件夹中的.htaccess中。如果放在其他地方,可能需要进行一些小的调整。