Apache:除非通过虚拟主机,否则我可以禁止访问目录吗?

如果我们假设我有一个名为machinename.ip的服务器,它将http://machinename.ipparsing为默认根目录( /var/www/html ),并通过vhosts文件www.example.comparsinghttp://www.example.com www.example.com/var/www/html/example

有没有简单的方法来禁止访问/var/www/html/example文件夹(和任何subdirs /文件), 除了通过www.example.com虚拟主机? 即当通过添加特定的虚拟主机URL时,您可以访问它们,以便www.example.com进入/var/www/html/examplehttp://machinename.ip/example或任何其他组合不会带您那里或者任何一个子展位?

例如文件/var/www/html/example/myfile.php

 http://www.example.com/myfile.php *yay works* 

 http://machinename.ip/example/myfile.php *does not* 

你可以这样做:在httpd.conf

 <Directory "/var/www/html"> Deny from all </Directory> 

然后在vhosts.conf文件的某处添加一些<Directory标记(像这样)

 <VirtualHost...{blah} # | ADD THIS # v <Directory "/var/www/html/example"> AllowOverride None Order allow,deny Allow from all </Directory> # ^ # | ADD THIS {...blah near where you may have something like...} DocumentRoot /var/www/html/example ServerAlias example.com </VirtualHost> 

你必须为所有的虚拟主机做这些块,但如果你准备忍受,这将做到这一点

当然你可以做到这一点。 我使用的大多数Web服务器的默认主机都指向/var/www/default/ ,所有域都被发送到/var/www/[domain] ,例如example.com位于/var/www/example.com/

默认的Apacheconfiguration不是这样的,但是你通常可以通过mkdir -p /var/www/default来克服,并且调整默认configuration指向的目录。