![Apache 阻止访问除单个位置之外的所有内容](https://linux22.com/image/763072/Apache%20%E9%98%BB%E6%AD%A2%E8%AE%BF%E9%97%AE%E9%99%A4%E5%8D%95%E4%B8%AA%E4%BD%8D%E7%BD%AE%E4%B9%8B%E5%A4%96%E7%9A%84%E6%89%80%E6%9C%89%E5%86%85%E5%AE%B9.png)
我正在尝试阻止对虚拟主机上所有内容的访问除了一个safe-path
(实际上,它下面的所有内容,所以/safe-path/item-1
,/safe-path/item-2
等等);通过阅读文档,我似乎应该能够做到:
<Location />
Order allow,deny
Deny from all
</Location>
<Location /safe-path>
Order allow,deny
Allow from all
</Location>
但这似乎不起作用;所有 URL 都返回 403。我也尝试了其他顺序,似乎没什么用。如果对于我试图解决的问题有“更好”的解决方案,我也愿意接受。
编辑:经过进一步研究,我发现Require all denied
andRequire all granted
似乎是 2.4 语法。但是,即使将块设置为如下所示,它似乎也无法按预期工作:
<Location "/">
Require all denied
</Location>
<Location "/safe-path">
Require all granted
</Location>
我访问的每个 URL 都出现 403 错误。即使更改顺序似乎也没什么效果。
答案1
不确定为什么它不能与Require
指令一起使用,但你可以改用mod_rewrite去实现你的愿望。
在这个例子中,我禁用(403 禁止)除以以下内容开头的查询之外的所有内容/projects
(使用具有子目录的现有文件夹进行测试):
<Directory /my/document/root/path>
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/projects
RewriteRule .* - [F]
</Directory>
应该在一个<Location>
块中以相同的方式工作。