【问题标题】:mod_rewrite matching wrong patternmod_rewrite 匹配错误的模式
【发布时间】:2011-08-19 18:18:18
【问题描述】:

我的.htaccess如下:

RewriteEngine On
RewriteRule ^client/([0-9a-zA-Z]+)/(.*)$ licensee/client/$2?id=$1 [L,QSA]
RewriteRule ^licensee/(.*)/$ licensee/$2?id=$1 [L,QSA]

如果我在浏览器中访问/client/asdf/,它会使用第二个重写规则而不是第一个。如果我注释掉第二个重写规则,它会按预期使用第一个规则。

我不知道第二条规则怎么可能匹配 /client/asdf/ - 我是否忽略了什么?

【问题讨论】:

    标签: mod-rewrite apache2


    【解决方案1】:

    当您访问 /client/asdf/ 时,它匹配第一个 RewriteRule,因此新请求变为“licenseee/client/?id=asdf”,它匹配您的第二个规则。

    【讨论】:

    • L 标志不会阻止这种情况的发生吗?你会推荐什么?
    • @Tak L 标志告诉 apache 停止处理第一个请求的重写规则,并将新请求标记为新请求,这与第二个规则匹配。最好为您的 RewriteRule 添加 RewriteCond 以避免这种情况。
    猜你喜欢
    • 1970-01-01
    • 2017-03-23
    • 2015-01-12
    • 1970-01-01
    • 2014-02-05
    • 2016-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多