Конфигурация Nginx: маршрутизируйте все .php файлы через индекс, кроме случаев, когда он содержит путь к файловому менеджеру

Я работаю над новым проектом, который будет иметь много перенаправлений со старого сайта Uris. Многие из старых урисов содержат .php расширение в uri и Nginx пытается загрузить их как файл, а не использовать наш метод контроллера перенаправления.

Чтобы сделать его немного сложнее, мы используем редактор wysiwyg с файловым менеджером, который при вызове использует .php расширение, так что это нужно исключить.

По сути, я хотел бы, чтобы это работало так, чтобы, когда я звоню, например, старый uri такие как /old-page/path/file.php это будет направлять его через index.php но когда я звоню /vendor/ckfinder/plugins/filemanager/dialog.php?... это загрузит фактический файл.

Я видел этот пост, который на самом деле не решает, что мне нужно, но я думаю, что это хорошая отправная точка Как удалить расширения .php и .html из URL, используя NGINX?

Моя существующая установка

location / {
try_files $uri $uri/ /index.php?$query_string;
}

location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}

Любая помощь приветствуется.

ОБНОВИТЬ

Я попробовал предложение @Richard Smith, которое после прочтения документации, по моему мнению, должно работать, но, к сожалению, по какой-то причине — это не так — вот что я попробовал:

location / {
try_files $uri $uri/ /index.php?$query_string;
}

location ~ \.php$ {
try_files $uri /index.php?$query_string;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
include fastcgi_params;
}

Так try_files проверяет, если $uri существует — и если нет, то возвращается к /index.php?$query_string;, который должен указывать на запрос index.php, Есть идеи, что мне здесь не хватает?

1

Решение

Если файлы PHP не существуют на новом сервере, самое простое решение — перенаправить любые несуществующие файлы PHP в /index.php — так же, как вы делаете для не-PHP URI.

Например:

location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
try_files $uri /index.php?$query_string;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
include fastcgi_params;
}

fastcgi_split_path_info а также fastcgi_index заявления и не требуется в этом конкретном location блок.

Увидеть этот документ для большего.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]