Apache 阻止访问除单个位置之外的所有内容

Apache 阻止访问除单个位置之外的所有内容

我正在尝试阻止对虚拟主机上所有内容的访问除了一个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 deniedandRequire 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>块中以相同的方式工作。

相关内容