it-swarm.com.de

301 Weiterleitungen für / blog zur Blog-Subdomain funktionieren nicht

Ich habe gerade eine neue Subdomain für mein Blog erstellt, also blog.example.com. Früher war es www.example.com/blog. Daher versuche ich jetzt, 301 Weiterleitungen von allen meinen alten /blog-Posts in die neuen blog.example.com-URLs zu schreiben. Ich habe den folgenden Code in mein htaccess eingefügt:

RewriteEngine On
RewriteCond %{HTTP_Host} ^www\.example\.com$
RewriteRule ^blog/(.*)$ http://blog.example.com/$1 [L,R=301]

Muss ich es jedoch nach dem # END Wordpress in das htaccess einfügen, oder fehle ich etwas? Wo in der htaccess Datei stecke ich diesen Code oder ist es sogar der richtige Code?

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

ODER muss ich ausschreiben?

Redirect 301 /blog/example-post http://blog.example.com/example-post

Jede Hilfe wäre dankbar, danke!

4
jenna

... stelle ich es nach dem # END Wordpress in den htaccess oder vermisse ich etwas?

Nein. Jede externe Weiterleitung sollte kommen vor dem Codeblock # BEGIN WordPress. dh Before WP schreibt die Anfrage intern um.

Wenn Sie es platziert haben nach dem Codeblock WP, wird es einfach ignoriert, da WP die Anforderung bereits weitergeleitet hat.

Andernfalls sieht Ihre mod_rewrite-Umleitung in Ordnung aus, vorausgesetzt, Ihre alte /blog/ -URL hat immer einen abschließenden Schrägstrich (zum "Blog-Stammverzeichnis"). Die Subdomain blog verweist auf dieselbe Stelle im Dateisystem wie Ihre Hauptdomain und Sie haben die Domain bereits kanonisiert (dh auf sie kann nur über die Subdomain www zugegriffen werden).

 Redirect 301 /blog ....

Sie sollten es vermeiden, Anweisungen RewriteRule (dh mod_rewrite) und Redirect (dh mod_alias) zu mischen. Da diese beiden Direktiven zu unterschiedlichen Modulen gehören, werden sie während der Anforderung zu nterschiedlichen Zeiten ausgeführt, und Sie können verwirrende Konflikte verursachen, wenn Sie nicht vorsichtig sind. Da Sie also bereits mod_rewrite (WordPress-Direktiven) verwenden, sollten Sie mod_rewrite für alle Weiterleitungen verwenden.

Es wäre egal, ob Sie das Redirect in Ihre Konfigurationsdatei gestellt hätten - es würde immer noch nach die mod_rewrite-Direktiven ausführen.

5
MrWhite

Sie möchten so etwas mit einem mod_alias

Redirect permanent /blog http://blog.example.com/

Das Schlüsselwort permanent bewirkt, dass Apache einen HTTP-Status von 301 dauerhaft verschoben anstelle von 302 gefunden sendet.

Um Ihre Methode zu verwenden, können Sie dies versuchen

RewriteEngine on

RewriteCond %{HTTP_Host} ^(www\.)?example\.com$
RewriteRule ^blog/(.*)$ http://blog.example.com/$1 [L,QSA,R=301]

RewriteCond %{HTTP_Host} ^blog\.example\.com$
RewriteCond %{REQUEST_URI} !^blog/
RewriteRule ^(.*)$ /blog/$1 [L,QSA]
2
norcal johnny