如何拒绝对文件夹的访问,但将其中的某些子文件夹从“拒绝”中排除?
我试过这样的事情(按此顺序):
#这个子文件夹不应该被拒绝并且里面的php脚本应该是可执行的
位置 ~ /data/public { 允许所有;}
#this 文件夹包含许多子文件夹,应该拒绝公共访问
位置〜/数据{全部拒绝;返回 404;}
...这不能正常工作。/data/public 文件夹中的文件是可以访问的(/data 中的所有其他文件都应该被拒绝),但是 /data/public 文件夹中的 PHP 文件不再执行(如果我不添加这些限制,PHP文件是可执行的)。
怎么了?怎么可能是对的?我认为有更好的方法来做到这一点。
如果有人可以帮助我,那就太好了:)。
谢谢,但是 PHP 文件仍然没有在 /data/public/ 文件夹中执行,就像一个简单的
<? echo "test"; ?>
它为您提供此文件作为下载(没有上面的“拒绝”配置,php 文件运行良好)。
我的 PHP 配置:
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
/data/ 之外的所有其他目录中的 PHP 文件正在工作......(其他子文件夹也是如此)。
php 文件没有被处理的原因是当它到达
/data/public/
它停在那里的位置并且不知道如何处理 php 文件。尝试将您的 php 位置放在另一个名为 php.conf 的文件中,并将该文件包含在您的服务器块和
/data/public/
块中。所以你的配置看起来像该
php.conf
文件(在您的情况下)将如下所示:位置规则应如下所示。
或者
nginx定位规则如下
nginx访问规则如下
所以一个工作配置应该看起来像
通过使用 deny all,它应该返回 403 Forbidden 而不是 404。
这应该允许访问和处理公共目录,并阻止任何其他内容。我在为 Magento 配置 nginx 时遇到了同样的问题,但我通过 ^~ 技巧解决了这个问题。