regex - 缺少参数时重写 URL

标签 regex apache .htaccess mod-rewrite

我正在寻找一个 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/

相关文章:

javascript - 无法使用 htaccess 加载 css、js 和图像

php - 将 .htaccess 应用于所有子目录

javascript - 在第二个连字符之前分割数据属性

java - 验证密码不包含来自名称的 3 个以上连续字符

apache - 退出Docker容器后保留Apache页面

apache - ProxyPassMatch 与 ProxyPassReverse

regex - 列出具有特定模式文件名的 linux 目录和子目录中的所有文件

ruby - 如何将 Ruby 正则表达式转换为 PCRE

php - https ://to Http rewrite in . htaccess

php - htaccess 页面根据参数条件重定向