Php

nginx:禁止訪問文件夾,但某些子文件夾除外

  • August 6, 2015

如何拒絕訪問文件夾,但“拒絕”中的某些子文件夾除外?

我嘗試了這樣的事情(按此順序):

#這個子文件夾不應該被拒絕,裡面的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;
}

引用自:https://serverfault.com/questions/450154