2010-07-26 66 views
1

我明白瞭如何使用的.htaccess禁止從我的Apache網絡服務器的IPS地址:定製禁令頁面自制網站

order allow,deny 
deny from 192.168.44.201 
deny from 224.39.163.12 
deny from 172.16.7.92 
allow from all 

我想創建一個自定義「你已經被禁止」頁面。我怎麼能這樣做?

編輯:

爲了澄清,我不試圖創建一個自定義403頁,因爲這些在其他情況下使用,也(即失敗基本身份驗證,等等)。到目前爲止,我來最接近的是:

rewritecond %{REMOTE_ADDR} ^127\.0\.0\.1$ 
RewriteRule !^banned$ /banned [NC,L] 

但這會產生,而不是發送用戶/禁止

回答

3

其他答案暗示403代碼的ErrorDocument將是通常的做法。但是,既然你想顯示一個不同的錯誤頁面,如果用戶被拒絕訪問基於IP(而不是其他原因),你可以使用mod_rewrite,正如你懷疑。

RewriteCond %{REMOTE_ADDR} =192.168.44.201 [OR] 
RewriteCond %{REMOTE_ADDR} =224.39.163.12 [OR] 
RewriteCond %{REMOTE_ADDR} =172.16.7.92 
RewriteRule !^/banned.html /banned.html [L] 

P.S.如果可能的話,這應該放在虛擬主機配置中,而不是.htaccess文件。如果您無權訪問虛擬主機配置文件,則可以將其放入.htaccess文件中,但從RewriteRule模式中刪除前導斜槓(因此!^/banned.html變爲!^banned.html)。

+0

謝謝你,那是導致我的內部服務器錯誤的斜線。我遇到了另一個問題 - 我已經在我的htaccess文件中有一個重寫規則,如果我不註釋掉第一個,我會得到內部服務器錯誤。我究竟做錯了什麼? – Mala 2010-07-26 21:31:05

+0

這很難說,沒有看到第一個重寫規則是什麼。 – 2010-07-26 23:06:07

+0

啊對不起。這裏是: http://flyingmonkey.nfshost.com/misc_files/htaccess.txt – Mala 2010-07-27 06:41:07

2

您使用ErrorDocument指令時,IP匹配內部服務器錯誤。被拒絕訪問的人被送往403頭,所以:

ErrorDocument 403 banned.html 

將禁止人們重定向到banned.html


編輯:另一種方法是完全放棄了mod_access的東西,並使用基於IP的重寫規則(如問題中所述)。它應該只是:

RewriteEngine on 
RewriteCond %{REMOTE_ADDR} 192.168.44.201 [OR] 
RewriteCond %{REMOTE_ADDR} 224.39.163.12 [OR] 
RewriteCond %{REMOTE_ADDR} 172.16.7.92 
RewrulteRule .* banned.html [L] 


編輯2:大衛戰勝了我一個幾乎相同的答案;我想his way是你想要

+0

雖然這確實有用,但每次有人遇到403錯誤時都會導致「禁止」消息 – Mala 2010-07-26 21:09:35

+1

@Mala Well ...是的,這不是重點嗎?除此之外的其他情況您是否爲403錯誤代碼提供服務? – 2010-07-26 21:12:59

+0

如果爲不能讀取文檔的用戶設置了文件權限,或者基本身份驗證失敗,則應該得到403錯誤。但是,他不會被禁止 – Mala 2010-07-26 21:13:41

1

在.htaccess文件的內容:

ErrorDocument 403 /banned.html 

變化/banned.html到任何路徑/你想要/文件名。