Я рефакторинг очень старого приложения, и я застрял в конфигурации Nginx;Все мои попытки заканчивались тем, что скрипт PHP загружался вместо выполнения или заканчивался «Файл не найден»
Структура каталогов
public
│
└─── front
│ │ index.php
│ │
│ │
│ └─── web_www.example.com
│ │ index.php
│ │ style.css
│ │ export/
...
ЦЕЛЬ
Все URL, кроме статических файлов (.js
, .css
...), должны быть направлены на public/front/index.php
Пример:
Почему некоторые URL выглядят так, как будто онискрипт PHP должен быть выполнен? Потому что это старое приложение, которое работало так;Теперь только 1 фронт-контроллер (public/front/index.php
) отвечает за выполнение кода
База, не работает vhost
server {
...
root /srv/app/public/front;
index index.php;
location / {
try_files $uri $uri/ /index.php$is_args$args =404;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php-fpm.app.sock;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~* \.(js|css|bmp|png|jpg|jpeg|gif|swf|ico)$ {
try_files $uri =404;
}
rewrite ^/(.*)$ /web_$http_host$uri break;
}
Что я делаюнеправильно / отсутствует, пожалуйста?
РЕДАКТИРОВАТЬ 1
Добавление файлов с пробами в расположение, как предложено @Florentin Stemate:
location ~ \.php$ {
try_files /index.php?$args $uri;
....
}
(Я изменил порядок и поместил $uri
в конце, поэтому мы всегда пытаемся пройти через фронт-контроллер, когда URL содержит .php
)
Это хорошо работает для всех страниц, кроме:
* 2 цикла перезаписи или внутреннего перенаправления при внутреннем перенаправлении на "/web_www.test-boutique.vm/web_www.test-boutique.vm / web_www.test-boutique.vm / web_www.test-boutique.vm / web_www.test-boutique.vm /....."