假设我有一台服务器,machinename.ip
它解析http://machinename.ip
为默认根目录(/var/www/html
),并http://www.example.com
通过 vhosts 文件解析www.example.com
为/var/www/html/example
有没有简单的方法可以禁止访问该/var/www/html/example
文件夹(以及任何子目录/文件)除了通过www.example.com
vhost?即,当通过添加特定的 vhost URL 时,您可以访问它们,因此,但是www.example.com
或任何其他组合都不会将您带到那里或任何子目录?/var/www/html/example
http://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*
答案1
你可以这样做: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>
你必须对所有的虚拟主机进行这些阻止,但如果你愿意忍受这一点,那么这个就可以了
答案2
当然可以。我使用的大多数 Web 服务器都有指向 的默认主机,/var/www/default/
并且所有域名都发送到/var/www/[domain]
,example.com
例如/var/www/example.com/
。
默认 Apache 配置不是这样的,但您通常可以通过 mkdir -p /var/www/default
调整默认配置指向的目录来克服这个问题。