Я пытаюсь включить PHP только для одного подкаталога (каталога laravel), но мне не удалось заставить это работать. NGINX всегда говорит 404 «Файл не найден» или php говорит «входной файл не указан». Что я делаю неправильно?
Это моя конфигурация местоположения:
location /laravel {
root html/laravel/public;
index index.php index.html index.html;
try_files $uri $uri/ /index.php?$query_string;
location ~ \.php$ {
root html/laravel/public;
fastcgi_pass 127.0.0.1:9000;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME document_root$fastcgi_script_name;
#include fastcgi_params;
include fastcgi.conf;
}
}
UDPATE 1Кажется, что nginx неправильно оценивает мои выражения местоположения:
2018/09/12 16:30:44 [ошибка] 26476 # 24408: * 1 Ошибка CreateFile () «C: /Server/nginx/html/index.php» (2: система не может найти указанный файл), клиент : 127.0.0.1, сервер: localhost, запрос: «GET / laravel / HTTP / 1.1», хост: «localhost»
Это неправильный путь и, по крайней мере, корень / location:
location / {
root C:/Server/nginx/html;
index index.html index.htm index.php;
}
Я пытался переместить блок, но ничего не изменилось.
ОБНОВЛЕНИЕ 2:
Кажется, что nginx очень глючит. В документации говорится:
Проверяет наличие файлов в указанном порядке и использует первый найденный файл для обработки запроса; обработка выполняется в текущем контексте. Путь к файлу создается из параметра file в соответствии с директивами root и alias. Можно проверить существование каталога, указав косую черту в конце имени, например, «$ URI /». Если ни один из файлов не был найден, производится внутреннее перенаправление на uri, указанный в последнем параметре.
Как показывает мой журнал ошибок, директива try_files не учитывает корневой путь, потому что пытается открыть файл относительно другого блока местоположения.
Как отметил @Richard в связанном потоке Stackoverflow, похоже, это ошибка nginx. Для меня это решение работает с nginx:
location /laravel {
alias html/laravel/public;
index index.php index.html index.html;
try_files $uri $uri/ @nested;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
#fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi.conf;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $request_filename;
#include fastcgi_params;
}
}
location @nested {
rewrite /laravel/(.*)$ /laravel/index.php?/$1 last;
}
Источник: https://serversforhackers.com/c/nginx-php-in-subdirectory
Других решений пока нет …