在Apache中,当某人仅在Web浏览器中使用IP地址时,如何禁用对网站的访问?


8

我正在CentOS上使用apache Web服务器,并且需要禁用人们通过在Web浏览器中使用服务器的IP地址访问网站的功能。我想要这样,以便当有人尝试浏览到IP地址时,他们得到一条禁止的错误消息。

为此需要什么配置?

Answers:


10

只需设置默认虚拟主机。中有一个注释示例,httpd.conf或做一些琐碎的事情:

<VirtualHost *:80>
    ServerName localhost
    DocumentRoot /var/www/html
</VirtualHost>

好吧,这解决了我的问题..非常感谢大家:)
Amr Elkhedewy

7

您可以使用mod_rewrite(在.htaccess文件中,或者在默认服务器上下文中,或者在单独的VirtualHost(其中ServerName,主机IP地址)中)实现此目的:

RewriteEngine On
RewriteCond %{HTTP_HOST} 1.2.3.4 # Replace with your own IP address
RewriteRule .* - [F]

这表示如果HTTP_HOST标头与ip地址1.2.3.4匹配,则任何请求都应使用来满足403 Forbidden。具有另一个HTTP_HOST标头(例如,具有实际域名而不是IP地址的标头)的任何请求都不会受到影响。


它在httpd.conf中不起作用
Amr Elkhedewy

它通过.htaccess文件工作,我需要从Apache配置中完成。
13年

2
您在编辑httpd.conf之后重新启动了apache吗?否则,apache将不知道新配置。这与.htaccess不同,后者也无需重新启动apache即可进行解析。
etagenklo

当然可以,但没有任何改变
Amr Elkhedewy 2013年

1

您不能通过IP阻止直接访问。您必须允许连接,然后再决定如何处理。这可以是返回403、404或将其重定向到所需的页面。您可以使用mod_rewrite完成此操作。

 RewriteEngine On
 RewriteCond %{HTTP_HOST} ^123\.123\.123\.123
 RewriteRule ^(.*)$ - [F,L]

这将与Web客户端传递的HTTP HOST标头匹配。所有其他请求都会通过。

但是,您可能希望出于SEO目的标准化URL。

使用这种方法,您可以重写不符合预期结果的所有内容。

RewriteCond %{HTTP_HOST}   !^fully\.qualified\.domain\.name [NC]
RewriteCond %{HTTP_HOST}   !^$
RewriteCond %{SERVER_PORT} !^80$
RewriteRule ^/(.*)         http://fully.qualified.domain.name:%{SERVER_PORT}/$1 [L,R]

参考:https : //httpd.apache.org/docs/2.0/rewrite/rewrite_guide.html#canonicalurl

参考:http : //en.wikipedia.org/wiki/URL_normalization


它在httpd.conf中不起作用
Amr Elkhedewy

它通过.htaccess文件工作,我需要从Apache配置中完成。
13年

它可以在httpd.conf中运行,但是请确保打开重写引擎并将其放在虚拟主机指令中。否则,它将仅适用于您的默认服务器。请参阅:httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecond
jeffatrackaid

1

此解决方案未涵盖所有情况。

将IP URL中的任何数字或点替换为其%##,例如用%31 ... 1替换%38 ...用%38替换,您将到达IP,而不是域URL。

假设此不良IP用于缓解说明:123.45.6.789

您必须对所有数字和点使用2个替代方法:点是%2E,0..9是%30 ..%39

RewriteEngine on
RewriteCond %{HTTP_HOST} (1|%31)(2|%32)(3|%33)(\.|%2E)(4|%34)(5%35)(\.|%2E)(6|%36)(\.|%2E)(7|%37)(8|%38)(9|%39)
RewriteRule . - [F]

丑陋的,可以用{1,3}减少它,并限制为有效IP,但是就您的IP而言,不需要这样做。

不要忘记“:80”之类的端口。HTTP_HOST包含它,SERVER_NAME不可靠。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.