当你看到答案时,你会踢自己。
我在这里要做的是排除一个名为 piwik.php 的文件,因为它应该在单独的位置接受特殊处理。
好的,您应该将该路径设置为默认位置之前的单独位置。例如
location ~ ^/stats/piwik.php$ {
allow 127.0.0.1;
deny all;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_read_timeout 150;
fastcgi_index index.php;
include fastcgi_params;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_read_timeout 150;
fastcgi_index index.php;
include fastcgi_params;
}
由于它们都是正则表达式位置块,因此匹配的 Nginx conf 中第一个列出的将具有优先级。
但是,您大概应该受到整个目录的保护。这可以通过使用匹配的前缀位置规则更轻松地完成:
location ^~ /stats/ {
allow 127.0.0.1;
deny all;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_read_timeout 150;
fastcgi_index index.php;
include fastcgi_params;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_read_timeout 150;
fastcgi_index index.php;
include fastcgi_params;
}
因为匹配前缀具有比正则表达式匹配更高的优先级,所以它们在您的 nginx conf 中的顺序无关紧要。比赛优先级的一个很好的解释是here