【问题标题】:Rewrite URL when parameter is missing缺少参数时重写 URL
【发布时间】:2013-11-04 17:44:32
【问题描述】:

我正在寻找一个 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位不等。

我试图通过将这段代码 sn-p 添加到我的 .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

唉,它不工作。我尝试通过取消注释最后一行来测试它,但根本没有发生重定向。因此,我将非常感谢任何见解、想法或进一步的建议......!

提前谢谢,

马丁

【问题讨论】:

    标签: regex apache .htaccess mod-rewrite


    【解决方案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]
    

    【讨论】:

    • 很高兴知道,请考虑将其标记为“已接受”,以便将来遇到类似问题的用户可以轻松查看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    • 2016-12-06
    • 2014-06-20
    • 1970-01-01
    • 2010-10-16
    相关资源
    最近更新 更多