2012-02-16 103 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