nginx,从位置排除单个文件

nginx,从位置排除单个文件,nginx,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; } 我想在这里做的是排除一个名为piw

如何从某个位置排除单个文件?以下块负责全局处理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;
}
我想在这里做的是排除一个名为piwik.php的文件,因为它应该在单独的位置接受特殊处理。所以我的目标是让它看起来有点像这样

location ~ \.php$ && NOT /stats/piwik.php  {
    ...
}

怎样才能做到这一点呢?

当你看到答案时,你会自责的

我想在这里做的是排除一个名为piwik.php的文件,因为它应该在单独的位置接受特殊处理

好的,您应该在默认路径之前将该路径设置为单独的位置。e、 g

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配置中的顺序应该无关紧要。

修复代码块
location~^/stats/piwik.php${allow 127.0.0.1;deny all;
,我无法编辑它,因为我至少需要6个字符来编辑:D