2016-08-02 6 views
1

Директива try_files в моем файле конфигурации Nginx работает только в определенных ситуациях. Вот то, что я работаю с:Nginx try_files не работает для URL-адресов, заканчивающихся на .php

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

Если я перейти к /admin/popups/image.php правильно загружает, потому что существующий файл - (я считаю, что это первая агд в заявлении try_files наезд). Если я перейду на/admin/webpages/он правильно загрузится - это будет третий arg -/admin/webpages/не существует, а route.php вытащит файл в /modules/webpages/admin/index.php. Когда я перехожу на /admin/webpages/edit.php, я получаю 404. Мне кажется, что он должен попасть в третий arg в try_files и работать. Если я перейду к /route.php?_route_url=/admin/webpages/edit.php, он отлично работает.

Я немного бил головой об этом, и я не могу понять это. Я уверен, что это что-то простое, но я не вижу этого. Благодарю.

UPDATE: После дальнейшего исследования, кажется, этот блок не отражает изменения, которые должны произойти в вышеуказанных 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; 
} 

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

ответ

0

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

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

Не забудьте перезапустить Nginx Service

+0

Я сделал это несколько раз. Благодарю. – user2532598

0

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

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

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