Nginx try_files не работает для URL-адресов, заканчивающихся на .php

Директива 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;
}

Не уверен, что это поможет. Я предполагаю, что мне нужно, чтобы исходный блок вступил в силу до этого. Спасибо


person user2532598    schedule 02.08.2016    source источник


Ответы (2)


Попробуйте этот, но убедитесь, что вы добавили его между server { }

location / {
    try_files $uri $uri/ /route.php?_route_url=$args;    
}

Не забудьте перезапустить службу nginx

person Sachin G.    schedule 02.08.2016

Я нашел ответ на свою проблему, добавив эту строку перезаписи

rewrite ^/admin/((?!popups).)*/([a-zA-Z0-9_-]+\.php?)$ /route.php?_route_url=$uri&$args last;

К счастью, у меня есть только один фактический каталог в /admin/.

person user2532598    schedule 02.08.2016