缺少参数时重写URL

时间:2013-11-04 17:44:33

标签: regex apache .htaccess mod-rewrite

我正在寻找一个Apache Rewrite Condition,如果未设置某个URL参数,则会触发该条件,然后通过添加此参数来重写URL。 所以基本上如果我的网址看起来像http://www.heco.de/index.php?id=123&catId=456,我希望它重定向到http://www.heco.de/index.php?id=123&catId=456&cHasH=456 第一个参数是静态页面ID,但catId从一个数字变化到6位数。

我尝试通过将此代码段添加到我的.htaccess来实现此目的:

RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} catId=([0-9]{1,6})
RewriteCond %{QUERY_STRING} !cHash=
RewriteRule ^(.*)/?id=123&catId=([0-9]{1,6})$ index.php?id=123&catId=$2&cHash=$2
#RewriteRule ^(.*)/?id=123&catId=([0-9]+)$ http://www.stackoverflow.com
唉,它不起作用。我尝试通过取消注释最后一行来测试它,但根本没有重定向。因此,我真的很感激任何见解,想法或进一步的建议......!

提前,

马丁

1 个答案:

答案 0 :(得分:1)

您无法在RewriteRule中匹配QUERY_STRING。

您可以使用此规则:

RewriteCond %{QUERY_STRING} !(?:^|&)cHash=[^&]+ [NC]
RewriteCond %{QUERY_STRING} (?:^|&)catId=([0-9]{1,6}) [NC]
RewriteRule ^index\.php$ $0?cHash=%1 [L,QSA,NC]