我已经编写了此配置来限制访问/var/www/news.html
:
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/
<Directory /var/www/>
Order deny,allow
Allow from all
Options FollowSymLinks
</Directory>
<Files /var/www/news.hmtl>
Order allow,deny
Deny from all
</Files>
</VirtualHost>
但它example.com/news.html
仍然打开。我通过明确限制对 URL 的访问解决了这个问题example.com/news.html
:
<Location /news.html>
Order allow,deny
Deny from all
</Location>
在将 URL 解析为相对于 DocumentRoot 的路径时,似乎所有<Directory>
规则<Files>
都被某些隐式规则覆盖<Location>
。这是真的吗?我应该将 DocumentRoot 视为一个提议公开可见的地方吗?
答案1
Files 指令不采用路径 - 像这样更改文件块。
<Files news.hmtl>
Order allow,deny
Deny from all
</Files>
上述方法可以工作,但可能无法完全满足您的要求,因为整个 vhost 文件系统中名为 news.html 的所有文件都将被阻止。您可以通过将 Files 指令包装在 Directory 指令中来限制其范围
<Directory /var/www/test>
Order deny,allow
Allow from all
Options FollowSymLinks
<Files news.hmtl>
Order allow,deny
Deny from all
</Files>
</Directory>
/var/www/test
现在目录中名为 news.html 的文件及其所有子目录将会被阻止。
看看文件系统和网络空间Apache 文档的部分以获取有关这些指令如何交互的更多信息。