NGINX,如何删除$fastcgi_script_name中的位置前缀

NGINX,如何删除$fastcgi_script_name中的位置前缀

我已经读过了:如何从 nginx 配置中的 $uri 中删除位置块?

但是有没有办法在不使用正则表达式的情况下从 $fastcgi_script_name 中去除位置块的前缀?

例如 :

location /foo/ {
        access_log  /var/log/nginx/access-truc.log  FOO;
        alias          /srv/http/php;
        fastcgi_pass   fpm;
        fastcgi_index  index.php;
        include        fastcgi.conf;
}

(注意:FOO 是一种显示 $fastcgi_script_name 的日志格式)

fastcgi.conf 有此行:

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;

我想$fastcgi_script_name设置为 onlybar.phpfoo/bar.php不是 urlhttp://example.com/foo/bar.php

答案1

我还没有找到使用 的方法$fastcgi_script_name,但我发现额外的间接层级确实有点令人困惑。我现在使用以下代码片段:

server {
    listen      80;
    root        /var/www;
    try_files   $uri $uri/ =404;
    autoindex   on;

    location /openid {
        alias   /opt/openid/www;
        index   index.html index.php;

        location ~ \.php$ {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $request_filename;
            include /etc/nginx/fastcgi_params;
        }
    }
}

请求将正确http://host/openid/设置为。SCRIPT_FILENAME/opt/openid/www/index.php

答案2

location /foo/ {
        fastcgi_split_path_info  ^/foo/((.*));
        access_log  /var/log/nginx/access-truc.log  FOO;
        alias          /srv/http/php;
        fastcgi_pass   fpm;
        fastcgi_index  index.php;
        include        fastcgi.conf;
}

相关内容