我已经读过了:如何从 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.php
而foo/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;
}