Php
nginx:禁止訪問文件夾,但某些子文件夾除外
如何拒絕訪問文件夾,但“拒絕”中的某些子文件夾除外?
我嘗試了這樣的事情(按此順序):
#這個子文件夾不應該被拒絕,裡面的php腳本應該是可執行的
位置 ~ /data/public { 全部允許;}
#此文件夾包含許多應拒絕公共訪問的子文件夾
位置〜/數據{全部拒絕;返回404;}
…無法正常工作。/data/public 文件夾中的文件是可訪問的(/data 中的所有其他文件都應該被拒絕),但 PHP 文件不再在 /data/public 文件夾中執行(如果我不添加這些限制,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/
塊中。所以你的配置看起來像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 }
該
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; }