2016-06-02 16 views
1

Ich versuche, eine extensionless Server-Anfrage in die entsprechende PHP-Datei umzuschreiben. Bisher habe ich es geschafft, aber ich würde PHP vor html neu schreiben, also wenn ich Dateien mit dem gleichen Dateinamen habe, versucht es zuerst die php-Version der Datei zu finden und nur wenn es nicht funktioniert. t als PHP existieren, versuchen Sie es als HTML zu finden. Ich weiß nicht, ob das Sinn macht oder nicht, ich habe mich nur gefragt, ob es möglich wäre, die PHP-Version einer Datei vor die HTML-Datei zu bekommen. Mein Code sieht so aus, aber wenn ich die Position @extensionless-php innerhalb der try_files Zeile ändere, führt dies entweder zu einem 404 oder einem 500 Fehler. Mein Code sieht so aus:Rewrite PHP-Erweiterung vor html on Nginx

root path/to/root; 
index index.php index.html; 

try_files $uri $uri.html $uri/ @extensionless-php; 

location ~ \.php$ { 
     try_files $uri =404; 

     # cgi-params 
    } 

location @extensionless-php { 
     rewrite ^(.*)$ $1.php last; 
    } 

Wenn jemand einen Weg weiß, um das zu erreichen, oder weitere Informationen dazu hat, lassen Sie es mich wissen.

+0

Nicht sicher, ob die Frage sinnvoll ist. Sie sprechen über ausdehnungsfreie Anfragen und schreiben in PHP um. Ich sehe nicht, wo HTML hereinkommt. – apokryfos

+0

HTML kommt herein, wenn es zwei Dateien mit dem gleichen Namen gibt, einer, der mit _.html_ und einem mit _.php_ endet. Ich möchte, dass es zuerst php umschreibt und wenn das nicht funktioniert (d. H. Die Datei existiert nicht in einer "php-version"), greifen Sie zurück, um es als html umzuschreiben. – flashingx

+0

Ich würde vorschlagen, dass Sie Ihre Frage damit aktualisieren, da dies die Frage um einiges verdeutlicht. – apokryfos

Antwort

0

Ein möglicher Ansatz besteht darin, die $uri.html-Klausel aus Ihrer try_files-Anweisung zu entfernen und beide Erweiterungen im angegebenen Standortblock zu versuchen. Zum Beispiel:

root path/to/root; 
index index.php index.html; 

location/{ 
    try_files $uri $uri/ @rewrite; 
} 
location ~ \.php$ { ... } 

location @rewrite { 
    if (-e $request_filename.php) { 
     rewrite^$uri.php last; 
    } 
    if (-e $request_filename.html) { 
     rewrite^$uri.html last; 
    } 
} 

Beachten Sie, dass die if Richtlinie mit dem safety warnings folgende kommt.

+0

Das ist mehr oder weniger was ich gesucht habe. Vielen Dank. – flashingx