Ich versuche herauszufinden, warum die /
die \.php$
locations directive nicht erlaubt, das Skript aufzunehmen.
Unten ist ein Beispiel .conf Ich verwende für Nginx. Wir führen API-Code aus, der im Pfad versioniert ist: //domian.com/v#.#/endpoint/uri
Unser Dokumentstammverzeichnis ist ein Verzeichnis unterhalb der Versionsnummer. index.php
existiert innerhalb der Versionsverzeichnis: 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;
[...]
}
ich alle möglichen Dinge versucht haben, kann aber nicht diese Arbeit zu bekommen scheinen. Sobald ich die /
entfernen funktioniert es wie erwartet, aber dann ändert sich meine SCRIPT_FILENAME Zeile von:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
An:
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
Und das bricht direkte PHP-Datei Anrufe - etwas, was ich nicht will.
Bearbeiten: Lösung: Beantwortet unten: Das Problem hatte mit der Reihenfolge der Übereinstimmung zu tun. Mustererkennung wird zuerst gefunden, nicht zuletzt entdeckt.
Die Reihenfolge wurde geändert. Es fehlgeschlagen die erste try_files
, weil das Muster explizit mit /
beginnend gesucht.
Ich lese: http://nginx.org/en/docs/http/request_processing.html
Eine Anfrage „index.php“ wird auch durch die Vorsilbe Lage „/“ zuerst und dann durch den regulären Ausdruck „(php) $.“ Abgestimmt. Daher wird von der letzteren Position behandelt und die Anforderung wird an einen FastCGI-Server übergeben, der auf localhost: 9000 abhört.
Haben Sie 'index index.php' in Ihrer ersten' location' Sektion ausprobiert? – miken32
Oder nur in Ihrem 'http' Abschnitt wäre besser. – miken32
Funktioniert nicht. Ich habe eine globale Index-Direktive. Ich habe hier einen hinzugefügt und auch keinen. Nginx nimmt die Datei '/ v1.0/index.php' als statische Datei und zeigt sie direkt an (ich habe 'default_type text/plain' global hinzugefügt, um den Download-Standard von application/oct ... stream zu verhindern). – guice