如何筛选包含字符串但不包含子字符串的所有Apache URL

时间:2012-02-16 03:00:46

标签: regex .htaccess url mod-rewrite

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

  

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

阻塞,如果它包含子字符串,则不进行测试,如下所示:

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

有没有办法在那里包含我的子串否定?

1 个答案:

答案 0 :(得分:0)

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

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

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

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