nginx 别名反映在 PHP_SELF (fpm)

nginx alias to reflect in PHP_SELF (fpm)

我的文件结构如下:

nginx 默认根目录:

~/marketplace/

正在尝试为以下对象创建别名:

~/marketplace/endpoints/sdk/tag.php

在 URI 位置下 /tagframe.htm

基本上,当我转到 http://marketplace/tagframe.htm?t=1&c=2 时,我需要将请求路由到 ~/marketplace/endpoints/sdk/tag.php 并保留 $query_string

虽然这有效:

location /tagframe.htm {
    try_files $uri /endpoints/sdk/tag.php$is_args$args;
}

它用文件的实际路径 (tag.php) 填充 PHP_SELF,而不是我需要的 URI 部分 (tagframe.htm) - 它认为 / tagframe.htm 是一个真实的文件并将其填充到 PHP_SELF.

例如Lighttpd通过其

alias.url /tagframe.htm => ~/marketplace/endpoints/sdk/tag.php

并且 PHP_SELF 显示我 /tagframe.htm

欺骗它的尝试是:

location /tagframe.htm {
    alias $root_path/endpoints/sdk;

    rewrite (.*) /endpoints/sdk/tag.php?$query_string;

    include php-fpm;
}

P.S $root_path 是我的地图项目根目录的默认值(hacky),php-fpm 文件是默认 fast_cgi 代理到 php :

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass unix:/tmp/php5-fpm.sock;
    fastcgi_index index.php;
    fastcgi_split_path_info ^(.+\.php)(/.*)$;
    include fastcgi_params;
    fastcgi_param SERVER_NAME $host;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
}

知道我做错了什么吗?

您在滥用 PHP_SELF。它旨在显示 the actual script file name 即 运行,而不是 URL。

您似乎要找的是 REQUEST_URI,即:

$_SERVER["REQUEST_URI"]