2012-02-16 102 views
1

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

逻辑是:阻止所有但那些谁也有_wpnonce 参数。

阻塞,没有测试它是否包含子看起来是这样的:

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

有没有办法也包括我的子否定呢?

回答

0

的文件说,该模式是一个Perl兼容的正则表达式,所以你应该能够使用负前向断言:

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

,虽然它可能是更清晰的把它放在一个单独的RewriteCond,前提是你可以得到所有的[OR]。如果不是针对[OR],您可以只写:

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

我已经使用了第二个版本,它的工作原理。由于名单较长(有更多的阻塞线),我必须先把它放在首位,否则它会在它之前忽略它们。此后还有其他定义。 ' RewriteCond%{QUERY_STRING}!_wpnonce = [a-z0-9] {10} [NC] RewriteCond%{QUERY_STRING}(menu | mod | path | tag)\ = \。?/? [NC,OR] ' – conualfy 2012-02-17 02:35:24