it-swarm.com.de

Htaccess leitet Seiten aus dem Unterordner in das Stammverzeichnis um, wobei die Abfragezeichenfolge beibehalten wird

Ich habe Seiten in verschiedenen Unterverzeichnissen in das Stammverzeichnis verschoben und möchte für jede Seite eine 301-Umleitung einrichten und eine eventuell vorhandene Abfragezeichenfolge beibehalten. Zum Beispiel:

  • www.example.com/folder/page1.html leitet weiter zu: www.example.com/page1.html

und

  • www.example.com/folder2/page2.html leitet weiter zu: www.example.com/page2.html

Wenn eine Abfragezeichenfolge vorhanden ist, die wir manchmal verwenden, möchte ich, dass diese beibehalten wird. Es gibt mehrere Seiten in mehreren Unterordnern, die ich umleiten muss. Alle könnten möglicherweise Abfragezeichenfolgen haben.

Ich habe einfache Weiterleitungen für Zielseiten durchgeführt, bei denen die Zielseite eine definitive Abfragezeichenfolge enthält und die Abfragezeichenfolge hart codieren kann, da sie immer dieselbe sein wird. Das ist hier nicht der Fall.

Ich habe das folgende Beispiel gefunden, das in der Nähe liegt, aber ich verstehe nicht genug davon, um zu wissen, ob es funktionieren wird, und es gibt zufällig EINEN Unterordner, dessen Inhalt nicht verschoben wird. Also ...

RewriteEngine On
RewriteRule ^subfolder/(.*)$ /$1 [R=301,QSA,L] 
2
J Green
RewriteRule ^subfolder/(.*)$ /$1 [R=301,QSA,L]

Dies würde gut funktionieren, um alle Dateien innerhalb des spezifischen Unterordners umzuleiten. Das Flag QSA ist nicht erforderlich, da die Abfragezeichenfolge standardmäßig beibehalten wird. Das QSA -Flag wäre nur erforderlich, wenn Sie eine Abfragezeichenfolge in die Substitution (dh das 2. Argument für die RewriteRule -Direktive - die Ziel-URL) einfügen und die möchten ursprüngliche Abfrage zu der Anforderung angehängt (Query String Append).

Wenn Sie jedoch jedes Unterverzeichnis mit Ausnahme von einem umleiten möchten, können Sie dies in einer einzelnen Regel tun, indem Sie Ausnahme für das Unterverzeichnis erstellen, das Sie nicht umleiten möchten.

Zum Beispiel mit mod_rewrite in .htaccess:

RewriteCond %{REQUEST_URI} !^/subdir-not-redirected/ [NC]
RewriteRule ^[^/]+/([^/]*)$ /$1 [R=302,L]

Wenn es sich nur um .html Dateien handelt, die Sie umleiten möchten, müssen Sie die Regex genauer festlegen ...

RewriteRule ^[^/]+/([^/]*\.html)$ /$1 [R=302,L]

Dies entspricht nur Dateien in einem einzigen Unterverzeichnis. Es werden keine Dateien gefunden, die mehr als ein Unterverzeichnis enthalten.

Dies ist eine 302 (temporäre) Weiterleitung. Wechseln Sie nur dann zu 301 (permanent), wenn Sie bestätigt haben, dass die Funktion in Ordnung ist, um mögliche Caching-Probleme beim Testen zu vermeiden.


Alternativ können Sie dies auch mit einer einzelnen mod_alias RedirectMatch -Direktive tun, wenn Sie keine vorhandenen mod_rewrite-Direktiven haben:

RedirectMatch 302 ^/(?!subdir-not-redirected)[^/]+/([^/]*\.html)$ /$1

Hierbei wird ein negativer Lookahead verwendet, um eine Ausnahme für das Unterverzeichnis zu erstellen, das nicht umgeleitet werden soll. (Sie können dieselbe Methode auch mit der obigen Anweisung RewriteRule verwenden, anstatt eine separate Anweisung RewriteCond zu verwenden.)

1
MrWhite