5 nginx
如何从一个位置排除单个文件?以下块负责全局 PHP 处理:
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;
}
Run Code Online (Sandbox Code Playgroud)
我想在这里做的是排除一个名为 piwik.php 的文件,因为它应该在单独的位置接受特殊处理。所以我的目标是让它看起来有点像这样
location ~ \.php$ && NOT /stats/piwik.php {
...
}
Run Code Online (Sandbox Code Playgroud)
如何做到这一点?
当你看到答案时,你会踢自己的。
我想要做的是排除一个名为 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;
}
Run Code Online (Sandbox Code Playgroud)
由于它们都是正则表达式位置块,因此 Nginxconf 中第一个列出的匹配的位置块将具有优先权。
但是,您可能应该保护整个目录。通过使用匹配的前缀位置规则可以更轻松地完成此操作:
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;
}
Run Code Online (Sandbox Code Playgroud)
因为匹配前缀比正则表达式匹配具有更高的优先级,所以它们在 nginxconf 中的顺序并不重要。关于匹配优先级的一个很好的解释是这里
| 归档时间: |
|
| 查看次数: |
9660 次 |
| 最近记录: |