Frage

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

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

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

Um die externen Links zur alten Permalink-Struktur anzugehen, fügte ich die folgende Zeile in meiner HTaccess-Datei hinzu:

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

Das Problem ist nun, dass die Umleitungslinie die Archivverbindungen bricht, z. "http://<domain>/2010/09/02"wird auf die Titelseite umgeleitet, anstatt die Beiträge vom 2. September 2010 anzuzeigen.

Ist es möglich, die Umleitungsrichtlinie in htaccess zu korrigieren, oder werde ich den Kuchen nicht essen und ihn auch haben können?

War es hilfreich?

Lösung

RecirectMatch von mod_alias ist nicht so leistungsstark wie mod_rewrite. Wenn Sie mod_rewrite auf Ihrem Host haben (hübsche Permalinks nutzen es beispielsweise), können Sie die Umleitung nur dann vornehmen, wenn sich die URL nicht im Archivverbindungsformat befindet.

Um für diesen Fall zu testen, gibt es RewriteCond Und um den Befehl zum Ausleitungsanlagen zu machen, gibt es die RewriteRule ... [R=301] Richtlinie.

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 ungetestet, aber ich denke, es sollte die Arbeit erledigen. Ich habe Quantifikator ({2}) verwendet, um zu spezifizieren, wie viele Zahlen Sie erwarten. Daneben habe ich in der Rewritecond ein Muster erstellt, das nur mit den 20. und 19 Jahren übereinstimmt.

Die erste Zeile (die Bedingung, RewriteCond. Das RewriteRule tut im Grunde genommen das Gleiche wie deine RedirectMatch Richtlinie.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit wordpress.stackexchange
scroll top