Перезапись Nginx в symfony2 не работает

#symfony #nginx

#symfony #nginx

Вопрос:

Я новичок в nginx, и это команды перезаписи, и мне действительно нужна помощь с этим. Я пытался решить это целый день, но ничего..

Если пользователь указывает этот URL:

 someurl.com/sub/1.0/healthcheck
  

Я хотел бы переписать его, чтобы указать на файл проекта Symfonys здесь:

 /var/www/sub/1.0/web/app_dev.php
  

И «проверка работоспособности» в URL-адресе относится к Symfony.

Но нет. Что-то здесь не так. Кажется, что он находит Symfony, но с URL-адресом что-то не так, поскольку он всегда возвращает:

Маршрут не найден

Даже если я опущу «проверку работоспособности» из URL, он все равно вернет ту же ошибку. (в качестве маршрута используется индексное действие с «/».)

Вот текущая конфигурация Nginx:

 server {
  server_name localhost;
  root /var/www/sub/1.0/web;

  error_log /var/log/nginx/error.log;
  access_log /var/log/nginx/access.log;

  location / {
        root /var/www/html/;
        index index.html;
  }

  location /sub/1.0/ {
    index app_dev.php;

    rewrite ^/sub/1.0/ /app_dev.php last;
  }

  location ~ (app|app_dev).php {
    include fastcgi_params;
    fastcgi_split_path_info ^(. .php)(/. )$;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
  }
}
  

Ответ №1:

Я понял это. Проблема заключалась в том, что Symfony принимает uri запроса, на который не повлияла перезапись, насколько это касалось fastcgi. Я добавил «fastcgi_param REQUEST_URI $uri?$args;» и тадаа! Это работает!

Вот исправленная конфигурация (без лишних строк, таких как корневое расположение ‘/’):

 server {
  root /var/www/sub/1.0/web;

  error_log /var/log/nginx/error.log;
  access_log /var/log/nginx/access.log;

  # If user writes the app_xxx.php into the url, remove it:
  rewrite ^/app_dev.php/?(.*)$ /$1 permanent;

  location /sub/1.0/ {
        index app_dev.php;
        rewrite ^/sub/1.0/(.*)$ /app_dev.php/$1 last;
        return  403; # If the rewrite was not succesfull, return error.
  }

  location ~ (app|app_dev).php {
    include fastcgi_params;
    fastcgi_split_path_info ^(. .php)(/. )$;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
    fastcgi_param REQUEST_URI $uri?$args;
    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
  }
}