【问题标题】:HTACCESS PUZZLE! Why does "?" work in one Rewrite statement and doesn't in another? See exampleHTACCESS 谜题!为什么 ”?”在一个 Rewrite 语句中工作,而不在另一个语句中工作?查看示例
【发布时间】:2014-01-06 22:20:35
【问题描述】:

所以,我从昨天开始就一直在研究 htaccess。我的 htaccess 文件中有两个 Rewrite 语句。

RewriteRule ^.*wp-login\.php\?loggedout=true.*$ /not_found [R,L]

上述语句有效。而

RewriteRule ^.*wp-login\.php\?action=login.*% /not_found [R,L]

...没有!

为了使第二种情况有效,我使用了以下语句。

RewriteCond %{QUERY_STRING} action=logout

RewriteRule ^wp-login\.php$ /not_found/? [R,L]

因此,在第二种情况下,在 RewriteRule 中不使用“?action=logout”似乎可以解决问题。

是的,问题已解决,但我想了解原因。这太令人费解了。

感谢任何帮助。谢谢。

【问题讨论】:

    标签: regex wordpress apache .htaccess mod-rewrite


    【解决方案1】:

    您之前的规则不正确,因为 QUERY_STRING 无法在 RewriteRule 中匹配。 RewriteRule 只匹配没有查询字符串的请求 uri。

    所以正确的规则是:

    RewriteCond %{QUERY_STRING} (^|&)action=logout(&|$)
    RewriteRule ^wp-login\.php$ /not_found/? [R,L]
    

    或者这包括两个查询参数:

    RewriteCond %{QUERY_STRING} (^|&)action=(login|logout)(&|$)
    RewriteRule ^wp-login\.php$ /not_found/? [R,L]
    

    【讨论】:

    • 在阅读您的答案之前,我一直非常误解 QUERY_STRING 到底是什么。非常感谢。能否请您解释一下 (^|&) 是什么?
    • (^|&) 表示查询参数在开头或在& 之后(&|$) 最后是相同的,这意味着查询参数后跟& 或行尾
    • 哦,哇!我不再是 htaccess 的初学者了。大声笑谢谢你阿努巴瓦。你是最好的!我很高兴在 StackOverflow 上有像你这样的人。当我的知识库足够大时,我也会做出贡献。再次感谢。
    • 感谢您的慷慨之词。这里有很多人像我一样尽自己的一份力。在 SO 上真的是一个很棒的社区。​​span>
    猜你喜欢
    • 1970-01-01
    • 2017-08-19
    • 2018-12-18
    • 2017-08-12
    • 2012-06-13
    • 2014-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多