NGINX 位置回退到 Symfony
NGINX location fallback to Symfony
我正在处理一个用纯 PHP 编写的遗留 API 项目,现在正试图将其移动到 Symfony 4 并且需要对 NGINX 配置进行一些更改。
我需要让新旧端点同时工作,所以我的计划是设置 NGINX,使其首先尝试服务旧端点,如果它不存在 (因为我计划在迁移到 Symfony 时删除它们)它重定向到 Symfony 的前端控制器。
当前目录结构是这样的:
到目前为止我的 NGINX conf 是这样的:
server {
root /project/www;
index index.php;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php-fpm:9000;
include fastcgi_params;
fastcgi_param HTTPS on;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~ / {
try_files $uri $uri/ /index.php$is_args$args;
}
}
它工作正常,如果我请求 /api/client_status
它使用 client_status
目录下的 index.php
并且如果我删除该文件夹它使用 Symfony 的前端控制器。
问题是其他应用程序有时会使用这些 enpoints 并附加 index.php,例如 /api/client_status/index.php
,在这些情况下我得到 404 而不是被重定向到 Symfony 的前端控制器。
我尝试用 rewrite ^/api/(.*)/index.php /api/;
在服务器块的顶部进行重写,但没有帮助。非常欢迎任何意见,甚至是另一种方法的建议。
附加了 index.php
的 URI 将由 location ~ \.php$
处理。您需要向此块添加一个 try_files
语句以避免 404 响应,而是将请求发送到 Symfony 的前端控制器。
例如:
location ~ \.php$ {
try_files $uri /index.php$is_args$args;
...
}
我正在处理一个用纯 PHP 编写的遗留 API 项目,现在正试图将其移动到 Symfony 4 并且需要对 NGINX 配置进行一些更改。
我需要让新旧端点同时工作,所以我的计划是设置 NGINX,使其首先尝试服务旧端点,如果它不存在 (因为我计划在迁移到 Symfony 时删除它们)它重定向到 Symfony 的前端控制器。
当前目录结构是这样的:
到目前为止我的 NGINX conf 是这样的:
server {
root /project/www;
index index.php;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php-fpm:9000;
include fastcgi_params;
fastcgi_param HTTPS on;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~ / {
try_files $uri $uri/ /index.php$is_args$args;
}
}
它工作正常,如果我请求 /api/client_status
它使用 client_status
目录下的 index.php
并且如果我删除该文件夹它使用 Symfony 的前端控制器。
问题是其他应用程序有时会使用这些 enpoints 并附加 index.php,例如 /api/client_status/index.php
,在这些情况下我得到 404 而不是被重定向到 Symfony 的前端控制器。
我尝试用 rewrite ^/api/(.*)/index.php /api/;
在服务器块的顶部进行重写,但没有帮助。非常欢迎任何意见,甚至是另一种方法的建议。
附加了 index.php
的 URI 将由 location ~ \.php$
处理。您需要向此块添加一个 try_files
语句以避免 404 响应,而是将请求发送到 Symfony 的前端控制器。
例如:
location ~ \.php$ {
try_files $uri /index.php$is_args$args;
...
}