car*_*rot 2 php rewrite nginx rules
如何拒绝对文件夹的访问,但“拒绝”中的某些子文件夹除外?
我尝试了这样的事情(按此顺序):
#这个子文件夹不应该被拒绝,里面的php脚本应该是可执行的
位置 ~ /data/public { 允许所有; }
#此文件夹包含许多应拒绝公共访问的子文件夹
位置 ~ /data { 全部拒绝;返回404;}
...这不能正常工作。/data/public 文件夹中的文件是可以访问的(/data 中的所有其他文件都应该被拒绝),但 PHP 文件不再在 /data/public 文件夹中执行(如果我不添加这些限制,PHP文件是可执行的)。
怎么了?怎么可能是正确的?我认为有更好的方法来做到这一点。
如果有人能帮我解决这个问题,那就太好了:)。
谢谢,但 PHP 文件仍然没有在 /data/public/ 文件夹中执行,就像一个简单的
<? echo "test"; ?>
Run Code Online (Sandbox Code Playgroud)
它为您提供此文件作为下载(没有上面的“拒绝”配置,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;
}
Run Code Online (Sandbox Code Playgroud)
/data/ 之外的所有其他目录中的 PHP 文件都在工作......(其他子文件夹也是如此)。
php 文件没有被处理的原因是当它到达该/data/public/位置时它会停在那里并且不知道如何处理 php 文件。
尝试将您的 php 位置放在另一个名为 php.conf 的文件中,并将该文件包含在您的服务器块和/data/public/块中。所以你的配置看起来像
server {
location ^~ /data/public/ {
allow all;
try_files $uri $uri/ /index.php?args;
# include to avoid writing it twice..
include php.conf
}
location ^~ /data/ {
deny all;
}
# .....
# Some other config blocks
# .....
# Put this line instead of the php config block to avoid writing the php part twice
include php.conf
}
Run Code Online (Sandbox Code Playgroud)
并且php.conf文件看起来(在您的情况下)如下所示:
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31907 次 |
| 最近记录: |