2012-04-12 6 views
2

Ich habe eine Website, die ich von einem Apache-Server auf einen Nginx-Server verschieben muss. Diese Umleitungen www.example.com/hello www.example.com/hello.php die ursprüngliche Verbindung zu halten, aber Weglassung der .phpNginx Rewrite-Regel/try_files funktioniert nicht

Die .htaccess-Datei dieser Website ist als

RewriteEngine on 
RewriteRule ^([^/\.]+)/?$ $1.php [L] 

folgt vom Ende der URL.

Ich habe versucht, dies in meinem Nginx Server Block zu replizieren ..

location/{ 
# Check if a file exists, or route it to index.php. 
     try_files $uri $uri/ /index.php; 
} 

rewrite ^/([a-z]+)$ /$1.php last; 

Die Rewrite-Regel funktioniert, alle Links auf die .php-Datei umgeleitet, aber bricht die Nginx try_files Regel in einem Verzeichnis für die Suche, wenn die Die Datei existiert nicht.

Der unten gezeigte Admin-Link ist ein Ordner mit einer index.php-Datei darin.

www.example.com/admin

Die try_files sollte dies ..

www.example.com/admin/

Da umleiten keine Datei admin.php genannt wird. Stattdessen erhalte ich die Meldung 'Keine Eingabedatei angegeben'.

Wenn ich das Neuschreiben entferne, funktioniert die try_files korrekt. Der Rest der Site funktioniert jedoch nicht ohne diese Rewrite-Regel.

Weiß jemand, wie ich die try_files und das Neuschreiben bekommen kann, um zusammen zu arbeiten?

Dank

Ben

Antwort

0

Ich weiß, dass dies nicht helfen kann, aber ich sehe Ihren Anwendungsfall und ich muss mich fragen, wie Sie wissen, dass ein Antrag auf/admin/admin gehen/und nicht /admin.php?

meine ich Ihre Rewrite-Regel klar, dass heißt, wenn Sie einen Antrag auf/[az] erhalten + dann sollte es neu geschrieben werden, um /[az]+.php

Doch Sie ein try_files wollen/admin drücken, um/admin/stattdessen?

in Ihrer Apache-Regel der Suche:

RewriteRule ^([^/\.]+)/?$ $1.php [L] 

Ich sehe hier, dass Sie zu begrenzen, sind versucht, was x.php geschickt wird. Ich sehe keine solchen Einschränkungen in Ihrem Nginx Neuschreiben.