我有一个Nginx密码保护目录,如果你去mydomain.com/protected_folder/就可以正常工作。但是,如果我去mydomain.com/protected_folder/index.php,页面加载就好了...它不应该。
如何设置我的位置块以完全阻止通过受保护目录的所有访问?
我的阻止:
location /protected_folder {
try_files $uri $uri/ =404;
auth_basic "Protected Folder Login";
auth_basic_user_file /etc/nginx/my_pass;
}
作为旁注。当我保护整个站点密码时,这不是问题。
答案 0 :(得分:1)
问题是此位置块不处理.php
个文件。它们由位置块处理,例如location ~ \.php$
。
如果使用^~
修饰符,则会强制此位置块具有比正则表达式位置块更高的优先级。有关详细信息,请参阅this document。
这当然会阻止//mydomain.com/protected_folder/index.php
正确执行。要更正此问题,您需要一个嵌套的location ~ \.php$
块来处理.php
下的/protected_folder
个文件。
例如:
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$
块与location ~ \.php$
块中现有server
块的副本。