it-swarm.com.de

Änderung der Permalink-Struktur - Weiterleitungen in htaccess unterbrechen die Archivverknüpfungen

Als ich mit meinem Blog angefangen habe, die Permalinks und folgende Struktur:

http://<domain>/%year%/%monthnum%/%day%/%postname%/

Vor einiger Zeit habe ich die Permalink-Struktur nur in "http://<domain>/%postname%/" geändert.

Um die externen Links zur alten Permalink-Struktur in den Griff zu bekommen, habe ich folgende Zeile in meine htaccess-Datei eingefügt:

RedirectMatch 301 /([0-9]+)/([0-9]+)/([0-9]+)/(.*)$ http://<domain>/$4

Jetzt besteht das Problem darin, dass die Umleitungslinie die Archivverknüpfungen unterbricht, z. "http://<domain>/2010/09/02" wird auf die Startseite umgeleitet, anstatt die Beiträge vom 2. September 2010 anzuzeigen.

Ist es möglich, die Weiterleitungsanweisung in htaccess zu korrigieren, oder kann ich den Kuchen nicht essen und habe ihn auch?

2
TFM

RedirectMatch von Mod_Alias ​​ist nicht so leistungsfähig wie Mod_Rewrite. Wenn Sie Mod_Rewrite auf Ihrem Host haben (Pretty Permalinks verwenden es zum Beispiel), können Sie die Umleitung nur vornehmen, wenn die URL nicht im Archiv-Link-Format vorliegt.

Um diesen Fall zu testen, gibt es RewriteCond und um den Umleitungsbefehl auszuführen, gibt es den RewriteRule ... [R=301] Direktive.

Ein Beispiel basierend auf Ihren Daten:

RewriteCond %{REQUEST_URI} !^/((20|19)[0-9]{2})/([0-9]{2})/[0-9]{2}$ [NC]
RewriteRule ^/([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*)$ http://<domain>/$4 [R=301,L]

Dies ist nicht getestet, aber ich denke, es sollte die Arbeit erledigen. Ich habe den Quantifizierer ({2}) verwendet, um besser anzugeben, wie viele Zahlen Sie erwarten. Außerdem habe ich in der RewriteCond ein Muster erstellt, das nur mit den 20 .. und 19 .. Jahren übereinstimmt.

Die erste Zeile (die Bedingung, RewriteCond) prüft, ob eine Archiv-URL nicht übereinstimmt, und nur wenn sie nicht übereinstimmt, wird die Regel für die Umleitung ausgeführt. Die RewriteRule verhält sich im Grunde genauso wie Ihre RedirectMatch-Direktive.

2
hakre