2009-07-10 3 views
1

Ich muss haben:rechte Ordnung der Rewrite-Regeln in einer .htaccess Datei

http://www.example.com/v1/my-project/ umgeleitet http://example.com/my-project/

so:

(1) entfernen Sie die www vom http_host

RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC] 
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L] 

(2) Entfernen Sie den 'v1 /' Teil des request_uri

RewriteCond %{REQUEST_URI} ^/v1/(.*)$ [NC] 
RewriteRule . %1 [R=301,L] 

(3) Ich möchte auch alle 404 auf die Homepage umleiten.

ErrorDocument 404/

(4) Schließlich sind alle meine Dokumente liegen tatsächlich in einem "v2 /" Ordner, der die aktuelle aktive Website hostet, aber ich will nicht "v2" in der URL, nur "/"

RewriteCond %{REQUEST_URI} !^/v2/ [NC] 
RewriteRule ^(.*)$ /v2/$1 [NC,L] 

Also, hier sind meine Regeln. Meine Frage ist: ich verwalte es nicht (2): es wird zu/umgeleitet (wegen der Regel (3) denke ich.) Ich denke, die Reihenfolge meiner Regeln muss fehlerhaft sein, aber ich kann es nicht richtig finden Sie helfen?

Antwort

3

"Regel 3" ist überhaupt keine Regel, und ihre Reihenfolge relativ zu Ihren RewriteRules spielt keine Rolle. Regel 2 schlägt aus einem anderen Grund fehl. Ich bin mir nicht sicher, ob es Ihren anspricht Problem, aber ich würde Ihre Regeln etwas vereinfachen, indem sie wie folgt zu schreiben:.

RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC] 
RewriteRule (.*) http://example.com/$1 [R=301,L] 

RewriteRule ^v1/(.*) /$1 [R=301,L,NC] 

RewriteCond %{REQUEST_URI} !^/v2/ [NC] 
RewriteRule (.*) /v2/$1 [NC,L] 
+0

funktioniert ein Genuss, vielen Dank! – pixeline

0

sollten Sie zuerst eine Regel schreiben, die eine externe Umleitung verursacht (R Flag) und dann die anderen Regeln Andernfalls wird eine bereits neu geschrieben URL kann für eine externe Weiterleitung verwendet werden, obwohl es nur für eine Inte bestimmt war Interne Umleitung.

Also ich werde die Reihenfolge, die Sie gerade haben, nicht ändern.