Nginx
Nginx - 用重寫的 URL 填充 REQUEST_URI
我有一個用於新 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?
包含重寫路徑的第三個位置配置是否有任何變數?
$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; ... }
有關更多資訊,請參閱此文件。