【问题标题】:How to filter all Apache URL containing string but not containing a substring如何过滤所有包含字符串但不包含子字符串的 Apache URL
【发布时间】:2012-03-07 11:25:51
【问题描述】:

我正在尝试过滤所有尝试访问 URL 中包含例如 path=\ 的地址的客户端(使用 .htaccess),但不过滤包含 _wpnonce=1234567890 的那些 URL。

逻辑是:除了那些也有 _wpnonce 的人之外,阻止所有的人 参数。

不测试是否包含子字符串的阻塞看起来像这样:

RewriteCond %{QUERY_STRING} (menu|mod|path|tag)\=\.?/? [NC,OR]

有没有办法在其中也包含我的子字符串否定?

【问题讨论】:

    标签: regex .htaccess url mod-rewrite


    【解决方案1】:

    文档说该模式是 Perl 兼容的正则表达式,因此您应该能够使用否定的前瞻断言:

    RewriteCond %{QUERY_STRING} ^(?!.*_wpnonce=1234567890).*(menu|mod|path|tag)\=\.?/? [NC,OR]
    

    虽然将它放在单独的RewriteCond 中可能更清楚,但前提是您可以让所有[OR]s 解决。如果不是[OR]s,你可以写:

    RewriteCond %{QUERY_STRING} !_wpnonce=1234567890 [NC]
    RewriteCond %{QUERY_STRING} (menu|mod|path|tag)\=\.?/? [NC]
    

    【讨论】:

    • 我使用了第二个版本,它可以工作。由于列表更长(有更多阻塞线),我不得不把它放在第一位,否则它会忽略它之前的那些。在此之后还有其他定义。 ` RewriteCond %{QUERY_STRING} !_wpnonce=[a-z0-9]{10} [NC] RewriteCond %{QUERY_STRING} (menu|mod|path|tag)\=\.?/? [NC,OR] `
    猜你喜欢
    • 2021-12-31
    • 2022-12-05
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    • 2014-03-23
    • 2020-05-26
    • 1970-01-01
    • 2021-12-18
    相关资源
    最近更新 更多