it-swarm.com.de

Speicherort von 301 Weiterleitungen in der .htaccess-Datei auf einer WordPress Site

Ich habe meine .htaccess -Datei früher bearbeitet, um von der WWW-Version zu einer Nicht-WWW-Version umzuleiten, und sie funktioniert ordnungsgemäß. Jetzt habe ich jedoch einige Seitenumleitungen, die ich ausführen muss. Ich schaue mir die Datei .htaccess an und bin mir nicht sicher, wo ich den tatsächlichen Weiterleitungscode platzieren soll - ich habe eine WordPress Site. Geht es am Ende oder in dem Bereich, wo es heißt WordPress? Hier ist meine .htaccess Datei:

# Use PHP5.4 as default
# Changed PHP handler from application/x-httpd-php54 to application/x-httpd-phpbeta
# on Thu Dec 17 16:50:26 MST 2015.
AddHandler application/x-httpd-phpbeta .php

RewriteEngine on
RewriteCond %{HTTP_Host} ^www\.example\.com$
RewriteRule ^/?$ "http\:\/\/example\.com\/" [R=301,L]

# 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
1
techygal
# Use PHP5.4 as default
# Changed PHP handler from application/x-httpd-php54 to application/x-httpd-phpbeta on Thu Dec 17 16:50:26 MST 2015.
AddHandler application/x-httpd-phpbeta .php

# BEGIN WordPress
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    # Insert redirect based rewrites here.
    # Example: RewriteRule ^redirectme$ http://example.com/redirectme [R=301,L]
    #
    RewriteCond %{HTTP_Host} ^www\.example\.com$
    RewriteRule ^/?$ "http\:\/\/example\.com\/" [R=301,L]
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>

# END WordPress

Ich habe deine .htaccess -Datei ein wenig geändert. Erstens sollten sich die Umschreiberegeln im Block IfModule befinden. Wenn der Serveradministrator später mod_rewrite aus Apache entfernt, wird Ihr Code das System nicht beschädigen, sondern ignoriert.

Überprüfen Sie auch meinen Code, um den besten Ort für Weiterleitungen zu finden. Ich schlug dort vor, um die Latenz zu minimieren. Die Regeln werden in der Reihenfolge von oben nach unten überprüft.

2
Mike

Wichtig ist, dass Sie Ihr externes (mod_rewrite) platzieren[* 1]) leitet vor die WordPress internen Umschreibungen weiter (wie Mike in seiner Antwort vorschlägt).

Die WordPress -Rewrites sind ein "catch all" und rewrite everything. Wenn Sie also nach dem WordPress -Block Umschreibungen/Weiterleitungen einfügen, werden diese einfach ignoriert.

RewriteCond %{HTTP_Host} ^www\.example\.com$
RewriteRule ^/?$ "http\:\/\/example\.com\/" [R=301,L]

(Abgesehen von der Fülle unnötiger Fluchten bei der Substitution), ist dies nicht vollständig. Dadurch werden nur Anforderungen an das Site-Stammverzeichnis umgeleitet. Vermutlich möchten Sie auch www.example.com/<whatever> nach example.com/<whatever> umleiten? In diesem Fall benötigen Sie stattdessen Folgendes (in .htaccess):

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

(Setzen Sie Ihre bevorzugte Domain auch in der WordPress Konfiguration?)


[* 1] Wenn Sie mod_alias Redirect (oder RedirectMatch) Direktiven für Ihre Weiterleitungen verwenden, spielt es keine Rolle, wo Sie Ihre Weiterleitungen im Verhältnis zum Front-Controller WordPress platziert haben (das verwendet mod_rewrite, dh RewriteCond und RewriteRule Direktiven). Dies liegt daran, dass die Direktiven mod_alias (Redirect/RedirectMatch) unabhängig von ihrer Position in der Konfigurationsdatei immer (nach mod_rewrite/RewriteRule) verarbeitet werden.

2
MrWhite