Nginx config: achemine tous les fichiers .php via index sauf s’il contient un chemin vers le gestionnaire de fichiers

Je travaille sur le nouveau projet, qui aura beaucoup de redirections à partir de l’ancien site Web uris. Beaucoup des anciens uris contiennent l’extension .php dans l’ uri et Nginx essaie de les charger sous forme de fichier plutôt que de revenir à notre méthode de contrôleur de redirection.

Pour rendre les choses un peu plus compliquées, nous utilisons l’éditeur wysiwyg avec le gestionnaire de fichiers qui, lorsqu’il est appelé, utilise l’extension .php pour que celle-ci soit exclue.

En fait, je voudrais que cela fonctionne comme ça, quand j’appelle par exemple un ancien uri tel que /old-page/path/file.php il le /old-page/path/file.php via index.php mais quand j’appelle /vendor/ckfinder/plugins/filemanager/dialog.php?... il va charger le fichier actuel.

J’ai vu ce post, qui ne résout pas vraiment ce que je cherche, mais je pense que c’est un bon sharepoint départ Comment supprimer les extensions .php et .html de l’URL en utilisant NGINX?

Ma configuration existante est

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

Toute aide serait très appréciée.

METTRE À JOUR

J’ai essayé la suggestion de @Richard Smith, qui après avoir lu les documents, je pense, devrait fonctionner, mais malheureusement, pour quelque raison que ce soit – ce n’est pas le cas – voici ce que j’ai essayé:

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

Donc, try_files vérifie si $uri existe – et si ce n’est pas le cas, il revient à /index.php?$query_ssortingng; , qui devrait pointer la requête vers index.php . Une idée de ce qui pourrait me manquer ici?

Si les fichiers PHP n’existent pas sur le nouveau serveur, la solution la plus simple consiste à redirect les fichiers PHP inexistants vers /index.php , comme vous le faites pour les URI non-PHP.

Par exemple:

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

Les fastcgi_split_path_info et fastcgi_index et non obligatoires dans ce bloc d’ location particulier.

Voir ce document pour plus d’informations.