Директива try_files в моем файле конфигурации Nginx, кажется, работает только в определенных ситуациях. Вот с чем я работаю:
location / {
try_files $uri $uri/ /route.php?_route_url=$uri;
}
Если я перехожу к /admin/popups/image.php, он корректно загружается, потому что это существующий файл (я считаю, что это первый аргумент в предложении try_files). Если я захожу в / admin / webpages /, он корректно загружается — это будет третий аргумент — / admin / webpages / не существует, а route.php извлекает файл по адресу /modules/webpages/admin/index.php. Когда я захожу на /admin/webpages/edit.php, я получаю 404. Мне кажется, что он должен попасть в третий аргумент в try_files и работать. Если я перехожу к /route.php?_route_url=/admin/webpages/edit.php, он работает нормально.
Я бился головой об этом немного, и я не могу понять это. Я уверен, что это что-то простое, но я не вижу этого. Благодарю.
ОБНОВИТЬ:
После дальнейшего изучения кажется, что этот блок не отражает изменения, которые должны произойти в try_files выше:
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors off;
fastcgi_buffer_size 16k;
fastcgi_buffers 4 16k;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
}
Не уверен, что это поможет. Я предполагаю, что мне нужно, чтобы оригинальный блок вступил в силу до этого. Спасибо
Попробуйте это, но убедитесь, что вы добавляете это между сервером {}
location / {
try_files $uri $uri/ /route.php?_route_url=$args;
}
Не забудьте перезапустить сервис nginx
Я нашел ответ на мою проблему, добавив эту строку переписать
rewrite ^/admin/((?!popups).)*/([a-zA-Z0-9_-]+\.php?)$ /route.php?_route_url=$uri&$args last;
К счастью, у меня есть только один фактический каталог в / admin /.