2017-03-27 6 views
1

mydomain.com/protected_folder/に行くとうまくいくNginxのパスワードで保護されたディレクトリがあります。しかし、私がmydomain.com/protected_folder/index.phpに行くと、ページはうまく読み込まれます...そして、それはすべきではありません。Nginxのパスワードで保護されたディレクトリが深いリンクのために機能しない

保護されたディレクトリのすべてのアクセスを完全にブロックするように場所ブロックを設定するにはどうすればよいですか?

マイブロック:サイドノートとして

location /protected_folder { 
     try_files $uri $uri/ =404; 
     auth_basic "Protected Folder Login"; 
     auth_basic_user_file /etc/nginx/my_pass; 
     } 

。私はサイト全体のパスワードを保護していたが、これは問題ではなかった。

答えて

1

問題は、.phpファイルがこのロケーションブロックで処理されないということです。それらはlocation ~ \.php$のようなロケーションブロックによって処理されます。

修飾子^~を使用すると、このロケーションブロックの正規表現ロケーションブロックよりも優先順位が高くなります。詳細はthis documentを参照してください。

もちろん、//mydomain.com/protected_folder/index.phpは正しく実行されません。これを修正するには、の下の.phpファイルを処理するためにネストされたlocation ~ \.php$ブロックが必要です。例えば

root /path/to/root; 

location ^~ /protected_folder { 
    try_files $uri $uri/ =404; 
    auth_basic "Protected Folder Login"; 
    auth_basic_user_file /etc/nginx/my_pass; 

    location ~ \.php$ { 
     ... 
    } 
} 

location ~ \.php$ { 
    ... 
} 

ネストlocation ~ \.php$ブロックはserverブロック内の既存location ~ \.php$ブロックの重複です。

+0

おかげでリチャードは、そのトリックをしたようです。感謝万円! –

関連する問題