it-swarm.com.de

301-Redirect-Direktiven für Blogger zur WordPress-Migration

Hallo, ich versuche mein Blog von Blogger nach WordPress zu verschieben und möchte eine einfache und übersichtliche URL-Struktur wie http://www.example.com/post-name/ beibehalten.

In Blogger habe ich die folgende URL-Struktur:

  1. www.example.com/2017/02/post-name.html
  2. www.example.com/2017/02/post-name.html?m=1
  3. www.example.com/2017/02/post-name.html?m=0

Ich kann all diese URLs von Blogger zu einer sauberen URL in WordPress mit der Struktur http://www.example.com/post-name/ umleiten, indem ich die Umleitungs-Plugins für WordPress verwende.

Ich verwende den folgenden regulären Ausdruck

  • Quell-URL: ^/\d{4}/\d{2}/(.*).html+.*
  • Ziel-URL: http://www.example.com/$1/

Das obige Setup hat einwandfrei funktioniert, aber ich möchte dasselbe mithilfe der serverseitigen Umleitungen erreichen, indem ich die Datei .htaccess bearbeite. Dieses Tool bietet die Option, die Umleitung im Format .htaccess zu exportieren, um sie auf dem Server zu aktualisieren. Diese exportierte Umschreiberegel funktioniert jedoch nicht.

Hier ist das exportierte Umschreiben von Redirection Plugins:

# Created by Redirection
<IfModule mod_rewrite.c>
RewriteRule ^\d{4}/\d{2}/(.*).html+.* http://www.example.com/$1/ [R=301,L]
</IfModule>
# End of Redirection

Was soll ich tun oder gibt es ein Problem mit meinem Ausdruck für die .htaccess-Datei?

1
nasirs
 RewriteRule ^\d{4}/\d{2}/(.*).html+.* http://www.example.com/$1/ [R=301,L]

Dies sieht so aus, als ob es "funktionieren" sollte, obwohl es einige Dinge gibt, die aufgeräumt werden können, und die Abfragezeichenfolge (dh m=1 oder m=0) in der URL verbleibt.

Stellen Sie außerdem sicher, dass Sie Ihren Browser-Cache geleert haben, bevor Sie Tests durchführen, da 301s vom Browser hart zwischengespeichert werden. Aus diesem Grund kann es einfacher sein, mit 302 (temporären) Weiterleitungen zu testen und nur dann zu 301 zu wechseln, wenn Sie sicher sind, dass die Weiterleitungen einwandfrei funktionieren. (Tipp: Testen Sie mit geöffnetem Objektinspektor des Browsers und aktivierter Option "Cache deaktivieren".)

Diese Weiterleitung muss sich auch am Anfang Ihrer .htaccess-Datei befinden, vor dem WordPress-Front-Controller (dh vor dem # BEGIN WordPress-Abschnitt).

Versuchen Sie stattdessen Folgendes:

RewriteRule ^\d{4}/\d{2}/(.+)\.html$ http://www.example.com/$1/? [R=301,L]

Der nachfolgende +.* in Ihrem pattern ergibt keinen Sinn (obwohl dies kein Problem darstellen sollte), da hierdurch einfach die l (von html) 1 oder mehrmals wiederholt wird, gefolgt von irgendetwas. Der .html ist immer das Ende des URL-Pfads (die Abfragezeichenfolge ist nicht Teil des URL-Pfads), daher sollte dem $ (Anker für das Ende der Zeichenfolge) unbedingt folgen.

Der ? am Ende der RewriteRule substitution entfernt die Abfragezeichenfolge effektiv von der Ziel-URL, indem eine "leere" Abfragezeichenfolge erstellt wird. Alternativ können Sie in Apache 2.4+ stattdessen das Flag QSD verwenden (Query String Discard). dh ... http://www.example.com/$1/ [QSD,R=301,L]

UPDATE: Ist es sicher zu bedienen ...

Nun, Sie könnten präziser mit dem regulären Ausdruck umgehen, um sicherzustellen, dass er nicht zu stark und nur mit den URLs übereinstimmt, an denen Sie interessiert sind. Die obige Anweisung stimmt beispielsweise auch mit URLs der folgenden Form überein: example.com/2017/02/foo/bar/post-name.html , was zu einer (möglicherweise ungültigen) Weiterleitung zu /foo/bar/post-name führen würde. Oder sogar example.com/2017/02/1111/22/post-name.html, was zu einer doppelten Umleitung führen würde. Dies spielt möglicherweise keine Rolle, in der Tat kann dies in Abhängigkeit von Ihren Umständen sogar wünschenswert sein. Sie können den post-name jedoch auf nur Wortzeichen (a-z, A-Z, 0-9 und _) und Bindestriche beschränken, indem Sie die RewriteRule Muster ändern. Zum Beispiel:

RewriteRule ^\d{4}/\d{2}/([\w-]+)\.html$ http://www.example.com/$1/? [R=301,L]

Aber sonst kann ich nicht sehen, dass es "unsicher" wäre.

0
MrWhite