用apache搭建的WEB服务器,如何让网友只能通过设定的域名,而不能直接通过服务器的IP地址呢,有两个方法可以实现(当然肯定还会有其他方法可以实现),都是修改httpd.conf文件来实现的,下面举例说明:
方法一:在httpd.conf文件最后面,加入以下代码
NameVirtualHost 221.*.*.*
<VirtualHost 221.*.*.*>
ServerName 221.*.*.*
<Location />
Order Allow,Deny
Deny from all
</Location>
</VirtualHost>
<VirtualHost 221.*.*.*>
DocumentRoot "c:/web"
</VirtualHost>
说明:蓝色部分是实现拒绝直接通过221.*.*.*这个IP的任何访问请求,这时如果你用221.*.*.*访问,会提示拒绝访问。红色部分就是允许通过www.wanweiwang.cn这个域名访问,主目录指向c:/web(这里假设你的网站的根目录是c:/web)
方法二:在httpd.conf文件最后面,加入以下代码
NameVirtualHost 221.*.*.*
<VirtualHost 221.*.*.*>
DocumentRoot "c:/test"
</VirtualHost>
<VirtualHost 221.*.*.*>
DocumentRoot "c:/web"
ServerName www.wanweiwang.cn
</VirtualHost>
说明:蓝色部分是把通过221.*.*.*这个IP直接访问的请求指向c:/test目录下,这可以是个空目录,也可以在里面建一个首页文件,如index.hmtl,首面文件内容可以是一个声明,说明不能通过IP直接访问。红色部分的意思跟方法一是一样的。
方法三:在httpd.conf文件最后面,加入以下代码
<Directory "/var/www">
Options Indexes FollowSymLinks
AllowOverride None
Order deny,allow
Deny from 192.168.1.99
</Directory>
方法四:
如题,主要修改httpd.conf 或者httpd-vhosts.conf文件。先给出来源网络的可行答案。
<VirtualHost *:80>
ServerName *
<Location />
Order deny,allow
Deny from all
</Location>
</VirtualHost>
<VirtualHost *:80>
ServerName www.abc.com
。。。。
。。。。
</VirtualHost>
*号代表监听那个IP地址。
为了使用基于域名的虚拟主机,你必须指定服务器IP地址(和可能的端口)来使主机接受请求,这个可以用NameVirtualHost
指令来进行配置。如果服务器上所有的IP地址都会用到,你可以用"*
"作为NameVirtualHost
的参数。
根据文档上的说明:
# The first VirtualHost section is used for all requests that do not
# match a ServerName or ServerAlias in any <VirtualHost> block.
所以,只有匹配到www.abc.com的域才会被处理,其他不匹配就默认使用第一个VirtuHost段来处理,这里也即为deny。
其中Order deny,allow命令中,Order作用是改变deny 和allow的执行顺序。先执行deny再执行allow。
ServerAlias
指令中列出的名字就是用户可以用来访问同一个web站点的其它名字:
方法五:修改httpd.conf
NameVirtualHost *:80之后加上
<VirtualHost *:80>
ServerName *
<Location />
Order deny,allow
Deny from all
</Location>
</VirtualHost>
放在<VirtualHost *:80>之前
注:修改后要重启apache