我有一个新的 PHP 应用程序的 Nginx 配置,该应用程序具有与另一个旧式 PHP 应用程序相同的功能,但 URL 不同。
我想保留旧应用程序的路径,用 替换路径/foo
前缀并用/page
替换特殊路径:/foo/bar
/page/otherBar
# legacy support
location ~ ^/foo/bar {
rewrite /foo/bar /page/otherBar$1 last;
}
# How to rewrite all other pages starting with "/foo" ?
# END legacy support
location / {
# try to serve file directly, fallback to front controller
try_files $uri /index.php$is_args$args;
}
location ~ ^/index\.php(/|$) {
proxy_read_timeout 300;
include fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/www/$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
}
这种方法不起作用,因为在包含文件中$request_uri
传递给的仍然包含。REQUEST_URI
fastcgi_params
/foo/bar
我尝试过设置REQUEST_URI
为$fastcgi_path_info
,但对于所有未重写的 URL 都失败了,因为它是空的。$uri
也不起作用,因为它只包含/index.php?
第三个位置配置是否有包含重写路径的变量?
答案1
$request_uri
具有原始 URI 的值,并$uri
具有最终 URI 的值。您可以使用该指令保存块内部的set
快照,并在稍后使用它来生成参数。$uri
location /
REQUEST_URI
像这样:
location / {
set $save_uri $uri;
try_files $uri /index.php$is_args$args;
}
location ~ ^/index\.php(/|$) {
include fastcgi_params;
fastcgi_param REQUEST_URI $save_uri;
...
}
看这个文件了解更多信息。