如何在nginx中为PHP/Laravel更改请求路径?
我正在尝试将遗留的php文件转换为单个入口点。目前,一些端点需要运行(大约10个),例如如何在nginx中为PHP/Laravel更改请求路径?,php,laravel,nginx,Php,Laravel,Nginx,我正在尝试将遗留的php文件转换为单个入口点。目前,一些端点需要运行(大约10个),例如/legacy\u endpoint.php。我想在服务器上将这些重写为不同的操作(post/get等) 到目前为止,我可以重写端点并跳过将其作为php文件运行的尝试(因为该文件不存在): 它运行并提供index.php文件。然而,在脚本(Laravel)中,我仍然看到“路由”,通过运行dd($request)将其视为 requestUri: "/legacy_endpoint.php"
/legacy\u endpoint.php
。我想在服务器上将这些重写为不同的操作(post/get等)
到目前为止,我可以重写端点并跳过将其作为php文件运行的尝试(因为该文件不存在):
它运行并提供index.php文件。然而,在脚本(Laravel)中,我仍然看到“路由”,通过运行dd($request)
将其视为
requestUri: "/legacy_endpoint.php"
我是否可以直接在nginx中将其重写为例如
/legacy/endpoint
或类似内容?我猜我必须更改请求本身?index.php
很可能从参数request\u URI获取路由,该参数使用fastcgi\u param request\u URI$request\u URI设置在fastcgi\u params
文件中代码>。这就是为什么重写…last
无法工作的原因,因为$request\u uri
从未更改过
假设您有多个旧URI,并且它们不作为本地文件存在,您可能希望使用map
块覆盖特定端点的REQUEST_URI
值。有关详细信息,请参阅
例如:
map $request_uri $endpoint {
default $request_uri;
/legacy_endpoint.php /legacy/endpoint;
}
server {
...
location ~ \.php$ {
try_files $uri /index.php =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_param REQUEST_URI $endpoint;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
...
}
map $request_uri $endpoint {
default $request_uri;
~^/legacy_endpoint\.php /legacy/endpoint$is_args$args;
}
映射
块必须位于服务器
块之外。添加了try\u files
语句,以强制以.php
结尾的URI也查找index.php
。fastcgi_param
语句必须在include
语句之后,以覆盖包含文件中设置的值
如果URI/legacy_endpoint.php
可能包含可选的查询字符串,则需要使用正则表达式来匹配URI的开头,例如:
map $request_uri $endpoint {
default $request_uri;
/legacy_endpoint.php /legacy/endpoint;
}
server {
...
location ~ \.php$ {
try_files $uri /index.php =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_param REQUEST_URI $endpoint;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
...
}
map $request_uri $endpoint {
default $request_uri;
~^/legacy_endpoint\.php /legacy/endpoint$is_args$args;
}
最干净的解决方案是外部重定向,例如:location=/legacy_endpoint.php{return 301/legacy/endpoint;}
传统端点的使用者不支持重定向。