【问题标题】:NGINX location fallback to SymfonyNGINX 位置回退到 Symfony
【发布时间】:2019-01-09 06:04:02
【问题描述】:

我正在处理一个用纯 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/$1; 在服务器块的顶部进行重写,但没有帮助。非常欢迎任何意见,甚至是其他方法的建议。

【问题讨论】:

  • 您可以尝试将try_files $uri /index.php$is_args$args; 添加到您的location ~ \.php$ 块中。
  • @RichardSmith,成功了,非常感谢!如果您将此评论添加为答案,我将很乐意接受。干杯!

标签: php symfony nginx nginx-location


【解决方案1】:

带有index.php 的URI 将由location ~ \.php$ 处理。您需要在此块中添加 try_files 语句以避免 404 响应,而是将请求发送到 Symfony 的前端控制器。

例如:

location ~ \.php$ {
    try_files $uri /index.php$is_args$args;
    ...
}

【讨论】:

    猜你喜欢
    • 2017-06-09
    • 1970-01-01
    • 2017-04-27
    • 2017-06-06
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多