2012-04-02 5 views
1

DIE INFONGINX Rewrite ohne IF-Anweisung

Ich putze, indem Sie einige Umschreiben in NGINX ein paar URLS in meiner Web-App auf.

Die erste Neufassung, die ich mache, ist für die Handhabung von Paging [ex. http://domain.com/p/2], und das zweite ist für einen Benutzerprofilbereich [ex. http://domain.com/username].

Die Neufassungen Ich verwende sind wie folgt:

rewrite ^/p/(.*)$ /index.php?p=$1; # paging rewrite from /p/<page_number> 
rewrite ^/(.*)$ /user.php?user=$1; # user page rewrite from /<username> 

Das Problem

Das Problem, das ich sollte ziemlich leicht zu erkennen sein habe. Da ich/p/und/username verwende, unterscheidet das Umschreiben nicht zwischen den beiden und endet damit, dass/p/2 als die Benutzerseite übergeben werden sollte.

Ich weiß, ich muss eine Überprüfung von/p/und behandeln Sie es anders als alles andere, um neu zu schreiben, aber in meinem Lesen habe ich gelesen, dass IF-Anweisungen sollten aufgrund möglicher unerwarteten Ergebnissen wenn möglich vermieden werden.

Frage

Ist dies ein Fall, in dem eine IF-Anweisung verwendbar wäre, wenn so etwas, dass ich gegen die richtige Anforderung vom Benutzer kommen bin Überprüfung, um sicherzustellen, aussehen würde. Wenn es eine Möglichkeit gibt, die Überprüfung ohne eine IF-Anweisung durchzuführen, möchte ich einen Einblick darin erhalten, dies zu erreichen.

Schätzen Sie jede Hilfe.

Cheers,

Jared

Antwort

4

Dies ist, was die letzte Flagge für ist. Fügen Sie es einfach zum ersten Rewrite hinzu, und wenn es übereinstimmt, dann wird das zweite Rewrite nicht ausgewertet:

+0

Nur die Spitze, die ich brauchte. Recherchieren zu "Last" und "Break". Prost. – Jared

+0

'last' führt eine interne Umleitung zum Ziel durch, während' break' einfach die gesamte Umschreibverarbeitung stoppt, $ uri auf das Ziel setzt und zur nächsten Anfrageverarbeitungsphase übergeht. – kolbyjack