2015-05-05 17 views
0

我試圖將5G Blacklist從Apache(.htaccess)轉換爲Nginx(.conf)。有在.htaccess的線,是造成問題:相同的正則表達式在Apache和Nginx中表現不同

<IfModule mod_alias.c> 
    RedirectMatch 403 (\,|\)\+|/\,/|\{0\}|\(/\(|\.\.\.|\+\+\+|\||\\\"\\\") 
</IfModule> 

我已經轉換它的.conf如下:

代碼包含在HTTP塊

map $request_uri $bad_uri { 
    default 0; 
    "~*(\,|\)\+|/\,/|\{0\}|\(/\(|\.\.\.|\+\+\+|\||\\\"\\\")" 1; 
} 

包含代碼in server block

if ($bad_uri) { 
    return 403; 
} 

據我所知,Apache和Nginx都使用perl regex,所以在從前者轉換到後者時不需要做任何改變。但是,下面的URI是在Nginx的給403,但做工精細在Apache:

www.example.com/some,url,with,commas
www.example.com/?q=some,url ,用,逗號

+0

你能不能用簡單的英語解釋,這個正則表達式應該怎麼辦呢? –

+0

@AlexeyTen 5G黑名單應該阻止不好的機器人,刮板,URL掃描等。這是來自該列表的一行。從我有限的知識中,我可以看出,這個正則表達式應該匹配任何具有''''+''/,/''{0}''(/(''''''+++''|''或'\「\」' –

+0

所以,我無法理解。應該阻止或不阻止'some,url,with,commas'嗎? –

回答

0

終於找到了問題。

在Apache中RedirectMatch只有網址不匹配查詢字符串,而$ REQUEST_URI在nginx的地圖與查詢字符串的URL。

所以對於Nginx的正確的代碼是:

map $uri $bad_uri { 
default 0; 
"~*(\,|\)\+|/\,/|\{0\}|\(/\(|\.\.\.|\+\+\+|\||\\\"\\\")" 1; 
} 
相關問題