J'essaie de comprendre pourquoi le préfixe /
ne permet pas à la directive \.php$
de repérer le script. Ci-dessous un exemple de fichier .conf que j'utilise pour nginx.
Nous exécutons le code API, versionné dans le chemin: //domian.com/v#.#/endpoint/uri
Notre racine_document est un répertoire sous le numéro de version; index.php
existe dans le répertoire version: path/to/sites/public/v1.0/index.php
index index.php # <-- this is in here globally
location ~ ^/(?<version>v[\d\.]+) {
try_files $uri $version/index.php?$args;
# Why does this NOT work? The/stopping \.php$ from matching
# try_files $uri /$version/index.php?$args;
}
location ~ \.php$ {
fastcgi_pass php56;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
[...]
}
J'ai essayé toutes sortes de choses, mais ne peut pas sembler obtenir ce travail. Une fois que je retire la /
cela fonctionne comme prévu, mais ma ligne SCRIPT_FILENAME passe de:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
Pour:
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
Et ce casse le fichier PHP direct - quelque chose que je ne veux pas.
Édition: Solution: Répondu ci-dessous: Le problème concernait l'ordre de correspondance. La correspondance de modèle est d'abord trouvée, pas la dernière découverte.
Changement de leur ordre travaillé. Il a échoué le premier try_files
parce que le modèle recherchait explicitement à partir de /
.
Je lisais: http://nginx.org/en/docs/http/request_processing.html
Une demande « index.php » est également abondés par l'emplacement du préfixe «/» d'abord, puis par l'expression régulière « (php) $. ». Par conséquent, il est géré par ce dernier emplacement et la demande est transmise à un serveur FastCGI en écoute sur localhost: 9000.
Avez-vous essayé 'index index.php' dans votre première section' location'? – miken32
Ou, juste dans votre section 'http' serait mieux. – miken32
Ne fonctionne pas. J'ai une directive globale 'index'. J'en ai ajouté un ici, et non-go-soit. Nginx récupère le fichier '/ v1.0/index.php' en tant que fichier statique et l'affiche directement (j'ai ajouté' default_type text/plain' globalement pour éviter le téléchargement par défaut de l'application/oct ... stream). – guice