2009-08-26 10 views
2

Ok, ich habe noch eine Frage und ich bin ein Anfänger.Wie kombinieren Sie diese 2 .htaccess RewriteRules in einem?

Ich habe diese RewriteRule es die Abfrage korrekt leitet aber erlaubt mir nicht, die anderen Verzeichnisse verwendet werden:

RewriteRule ^([0-9A-Za-z]+)/?$ /query.php?id=$1 [L] 

und jetzt diese RewriteRule alle diese Verzeichnisse zu überspringen, aber jetzt die Regel oben sein muss kommentiert, damit das funktioniert.

RewriteRule ^(css|js|admin|pages|includes|images)(/|$) - [L] 

Kann ich die beiden kombinieren? Wenn das so ist, wie?

+1

Könnte es die Reihenfolge der Operationen sein? Wenn ich also das erste rewriterule nach dem zweiten platziere, wird es funktionieren? –

Antwort

4

RewriteRule s werden in der Reihenfolge überprüft, in der sie in der Datei vorkommen. Wenn Sie also die css|js|admin|pages|includes|images Regel zuerst setzen, wird sie zuerst übereinstimmen und den Neuschreibvorgang stoppen, bevor die andere Regel erreicht wird. Stellen Sie sicher, dass Sie die [L] Flagge am Ende dieser Regel behalten.

+0

Danke, nur um zu bestätigen, was ich gesehen habe, war richtig –

0

Es gibt auch diesen netten Trick:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+) query.php?id=$1 [L] 

Das heißt, wenn der Dateipfad nicht eine vorhandene Datei oder das Verzeichnis ist, die Anfrage an einen PHP-Skript senden (so dass Sie einige Modul laden können dynamisch oder Show eine nützliche 404 Seite).

+0

danke, also das ist wie eine 404-Weiterleitung? Wo platziere ich die benutzerdefinierte 404-Seite? –

+0

Es leitet alles (das ist keine Datei oder ein Verzeichnis in Ihrem Dateisystem) an das PHP-Skript um, was bedeutet, dass Sie damit umgehen können. Wenn Sie durch eine interne Routine feststellen, dass der angeforderte URI nicht vorhanden sein sollte, können Sie den Inhalt des 404-Statusfehlers und der Fehlerseite senden. – djc

Verwandte Themen