我正在寻找一个 Apache 重写条件,如果未设置某个 URL 参数,该条件就会触发,然后通过添加此参数来重写 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
唉,这不起作用。我尝试通过取消注释最后一行来测试这一点,但根本没有发生重定向。因此,我将非常感谢任何见解、想法或进一步的建议......!
提前致谢,
马丁
最佳答案
您无法匹配 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]
关于regex - 缺少参数时重写 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19773776/