rechte Ordnung der Rewrite-Regeln in einer .htaccess-Datei
-
12-09-2019 - |
Frage
Ich muss haben:
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) Die 'v1 /' Teil des REQUEST_URI
RewriteCond %{REQUEST_URI} ^/v1/(.*)$ [NC]
RewriteRule . %1 [R=301,L]
(3) Ich möchte auch alle 404 auf der Homepage umgeleitet werden.
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]
So, hier sind meine Regeln. Meine Frage ist: Ich habe es nicht geschafft, (2): es wird umgeleitet zu / (wegen der Regel (3) Ich denke, ich denke, dass die Reihenfolge meiner Regeln fehlerhaft sein muss, aber ich kann nicht scheinen, um es richtig zu bekommen.. Sie helfen?
Lösung
„Regel 3“ ist keine Regel überhaupt, und seine Ordnung in Bezug auf Ihre RewriteRules keine Rolle spielt. Regel 2 ist aus einem anderen Grund fehlschlägt. Ich bin mir nicht sicher, ob es Ihr Problem zu lösen, 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]
Andere Tipps
Sie sollten zunächst eine Regel schreiben, die eine externe Umleitung (R
Flag) und dann die anderen Regeln verursacht. Andernfalls wird eine bereits neu geschrieben URL kann für eine externe Weiterleitung verwendet werden, obwohl es nur für eine interne Umleitung vorgesehen war.
Also ich werde nicht die Reihenfolge Sie gerade jetzt ändern.