2010-07-26 67 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到任何路径/你想要/文件名。