Я работаю над новым проектом, который будет иметь много перенаправлений со старого сайта 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
, Есть идеи, что мне здесь не хватает?
Если файлы 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
блок.
Увидеть этот документ для большего.
Других решений пока нет …