2017-03-27 44 views
1

我有一个Nginx密码保护目录,如果您转到mydomain.com/protected_folder/,它可以正常工作。但是,如果我去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正确执行。要解决此问题,您需要一个嵌套的location ~ \.php$块来处理/protected_folder下的.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

感谢理查德,这似乎已经做到了。太感谢了! –