J'ai jeté un œil à la documentation de nginx et elle me confond encore complètement.
Comment ça try_files
marche? Voici ce que dit la documentation:
try_files
syntaxe: try_files chemin1 [chemin2] uri
défaut: aucun
contexte: serveur, emplacement
disponibilité: 0.7.27
Vérifie l'existence des fichiers dans l'ordre et renvoie le premier fichier trouvé. Un slash de fin indique un répertoire - $ uri /. Si aucun fichier n'est trouvé, une redirection interne vers le dernier paramètre est appelée. Le dernier paramètre est l'URI de secours et doit exister, sinon une erreur interne sera générée. Contrairement à la réécriture, $ args ne sont pas automatiquement conservés si la solution de secours n’est pas un emplacement nommé. Si vous avez besoin de préserver les arguments, vous devez le faire explicitement:
Je ne comprends pas comment il vérifie les chemins et que se passe-t-il si je ne veux pas d'erreur interne mais le fait de résumer le reste du chemin pour essayer de trouver un autre fichier?
Si je veux essayer un fichier en cache à /path/app/cache/url/index.html
et s'il échoue, /path/app/index.php
comment pourrais-je l'écrire? Si j'ai écrit:
try_files /path/app/cache/ $uri
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/run/php-fastcgi/php-fastcgi.socket;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
J'ai index index.php index.html index.htm;
. Quand je visiterai /urlname
, va-t-il essayer de vérifier /path/app/cache/urlname/index.php
alors /path/app/cache/urlname/index.html
? Si nous ignorons tout après, try_files
est-il possible try_files
de vérifier le dossier de cache? J'ai essayé et j'ai échoué.
Voici une autre utilisation pratique de try_files, en tant que redirection inconditionnelle vers des emplacements nommés. Les emplacements nommés agissent en tant que sous-routines, évitant ainsi la duplication du code. Lorsque le premier argument de try_files est "_", la redirection de secours est toujours prise.
la source