2014-06-17 15 views
0

我已經經歷了這些問題,我找不到我正在尋找的東西。Apache RewriteCond規則...試圖理解以前的人

從邏輯上說,請求只允許某些IP訪問某個頁面。所有其他的IP地址應該被轉發到一個通用的404規則(而不是得到一個安全錯誤,只是讓一些人想在)

的規則如下:

RewriteCond %{REQUEST_URI} ^/Folder/Site/index.hml 
RewriteCond %{REMOTE_HOST} !^IP1 
RewriteCond %{REMOTE_HOST} !^IP2 
RewriteCond %{REMOTE_HOST} !^IP3 
RewriteRule $ /Generic404.html [PT,L] 

所以以前的技術使用的上面,我是非常新的apache來自IIS世界其實非常可定製,我慢慢地學習和充實我的初級角色。 (根據我的理解,除IP1,IP2,IP3之外的每個IP都將通過Generic404.hml頁面,而IP1,IP2,IP3將不會接收到重新寫入,因此他們將能夠訪問該頁面)

但我想知道上面可以使用[OR]嗎?喜歡的東西:

RewriteCond %{REQUEST_URI} ^/URL 
RewriteCond %{REMOTE_HOST} !^IP-1 [OR] 
RewriteCond %{REMOTE_HOST} !^IP-2 [OR] 
RewriteCond %{REMOTE_HOST} !^IP-3 
RewriteRule $ /Generic404.html [PT,L] 

我很好奇,不僅是因爲他對我爲什麼不能使用[OR]的解釋是沒有意義,我在所有...我希望有人能實際上在某種程度上解釋這對我有意義。

回答

0

重寫條件的默認運算符是邏輯AND。如果你用邏輯OR替換它,你會得到不同的結果。

當您不是來自IP1-IP3時,第一條規則將顯示404,因爲在顯示404之前必須全部填寫所有重寫條件。

如果IP1與IP2和IP3的值不同,第二條規則將始終顯示404。因爲一個條件返回true就足以應用整個規則。如果IP1到IP3具有不同的值,則至少有兩個條件檢查將返回true。