location /_private { deny all; } location ~ \.php$ { # Workaround PHP vulnerability: # http://forum.nginx.org/read.php?2,88845,page=3 try_files $uri =404; include /etc/nginx/fastcgi_params; keepalive_timeout 0; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass unix:/tmp/php.socket; }
我想拒绝访问所有的东西,这是在_private
目录。 当我尝试访问_private/a
,我得到403错误,就像应该。 但是当我尝试访问_private/b.php
, deny all
部分被完全忽略。
使您的/_private
位置优先于正则匹配:
location ^~ /_private {
而已。
nginx文档具有关于哪个位置块将应用于给定请求的良好信息。 去引用:
- 带有“=”前缀的指令与查询完全匹配。 如果find,search停止。
- 所有其余的指令与传统的string。 如果该匹配使用“^〜”前缀,则停止search。
- 正则expression式,按照它们在configuration文件中定义的顺序。
- 如果#3产生匹配,则使用该结果。 否则,使用来自#2的匹配。