Переписать с помощью Nginx и PHP fastcgi по-прежнему отправляет старый request_uri в бэкэнд (php и symfony) - PullRequest
5 голосов
/ 01 декабря 2011

Я пытаюсь перенести php-сайт, на котором работает платформа Symfony, на nginx и php поверх fastcgi.

Все это хорошо работает с использованием инструкции Symfony из http://wiki.nginx.org/, но у меня возникают проблемы спользовательское правило перезаписи.

Моя цель - переписать URL-адреса вида / aaaa на / view / shorthand / aaaa .Затем запрос должен быть обработан php и symfony.

Старое правило переписывания apache:

RewriteRule ^([0-9a-f]+)$ index.php/view/shorthand/$1 [L]

Правила Nginx, которые я пробовал:

rewrite ^/([0-9a-f]+)$ /view/shorthand/$1 break;
rewrite ^/([0-9a-f]+)$ /index.php/view/shorthand/$1 break;

Все они отправленыдля fastcgi, но request_uri все еще кажется / aaaa , так как я получаю эту ошибку:

FastCGI sent in stderr: "Action "aaaa/index" does not exist" while reading response header from upstream

Я также безуспешно пытался использовать try_files.Пожалуйста, совет.

1 Ответ

12 голосов
/ 19 сентября 2012

Проблема в том, что по умолчанию установлены переменные FastCGI (fastcgi_params файл конфигурации), где REQUEST_URI равно $request_uri для nginx.Но если вы внимательно прочитаете документацию Nginx , вы заметите разницу между $request_uri и $uri переменными.

  • $request_uri = полный URI исходного запроса (с аргументами)
  • $uri = текущий URI в запросе, нормализовано

Значение $uri может изменяться во время обработки запроса, например, при выполнении внутренних перенаправлений или при использовании файлов индекса.Итак, если вы хотите исправить значение REQUEST_URI до его передачи в PHP, просто измените $request_uri на $uri?$args в fastcgi_params.

Именно так ведущий разработчик Nginx Игорь Сысоев рекомендует в официальном списке рассылки .

...