symfony — Symfony2, phpbrew, nginx, php 7.1 и файл не найден

Я пытался обновить до php 7.1, используя phpbrewи решил установить его с помощью nginx, поскольку я везде читал, что он проще, чем Apache (на мой скромный взгляд не так просто).

Когда я пытался запустить Symfony2 с помощью nginx, я наткнулся на эта страница документа, который дает базовый конфиг для Sf2 на nginx.

Мне удалось настроить php-fpm для обслуживания app_dev.phpи каждый файл, оканчивающийся на .php правильно. Однако, как только я перехожу на другой URL (/home например), конфиг nginx ломается, и я получаю File not found ошибка в php-fpm,

Как настроить виртуальный хост nginx, чтобы разрешить все после app_dev.php или же app.php быть переписан (как это было бы с modrewrite на apache2)?

Мой файл nginx для справки:

server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;

root /usr/share/nginx/html;
index index.html index.htm;

server_name localhost;

location / {
try_files $uri $uri/ =404;
}

location /my-app {
index web/app_dev.php;
try_files $uri /web/app.php$is_args$args;
}

location /dist {
root /usr/share/nginx/html;
index depp/index.php;
try_files $uri /depp/index.php$is_args$args;
}

location ~ \.php$ {
fastcgi_pass unix:/home/gabriel/.phpbrew/php/php-7.1.0/var/run/php-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
fastcgi_param REQUEST_URI $uri?$args;
}
}

0

Решение

Вам не хватает условия перезаписи, чтобы перехватить все входящие запросы и переслать их на ваш фронт-контроллер.

Попробуйте что-то вроде:

  # strip app.php/ prefix if it is present
rewrite ^/app\.php/?(.*)$ /$1 permanent;

location /my-app {
index app.php;
try_files $uri @rewriteapp;
}

location @rewriteapp {
rewrite ^(.*)$ /app.php/$1 last;
}

# Symfony 2 app index
location ~ ^/app\.php(/|$) {
fastcgi_pass unix:/home/gabriel/.phpbrew/php/php-7.1.0/var/run/php-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

# deny access to any other php files
location ~^.*\.php(/|$) {
deny all;
}

Ваша текущая конфигурация является более общей конфигурацией для любого .php скрипт, но Symfony2 и фреймворк в целом предоставляют только универсальный фронт-контроллер.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]