it-swarm.com.de

Wie 301 Umleitung für vollständige URL zu tun?

Ich habe eine Menge URLs, die nicht umgeleitet oder besser mit mod_rewrite in .htaccess umgeschrieben werden können. Stattdessen habe ich 301 Umleitungen manuell erstellt. Es sind nicht zu viele Datensätze, etwa 40 Weiterleitungen, und ich kopiere im Grunde eine URL aus einer Excel-Tabelle. So leiten Sie eine vollständige URL in der Unterdomäne zur Hauptdomäne um:

Ich möchte auf diese Weise umleiten:

http://m.somesite.com.au/site/somesite/faqs -> 301 http://www.somesite.com.au/faqs/

Und leiten Sie die globale Subdomain natürlich folgendermaßen um:

http://m.somesite.com.au -> 301 http://www.somesite.com.au

was eigentlich funktioniert. Was mache ich falsch?

Zum Beispiel:

Dies leitet die Arbeit weiter

redirect 301 /about-us/go-social/ http://www.somesite.com/about-us/
redirect 301 /about-us/team/John/ http://www.somesite.com/about-us/

Und eine ganze Reihe von ähnlichen Weiterleitungen, und dann ungefähr dann Weiterleitungen wie diese, die nicht funktionieren:

Diese Weiterleitungen funktionieren nicht

redirect 301 http://m.somesite.com.au/site/somesite/faqs http://www.somesite.com.au/faqs/

Kann ich die vollständige URL auf diese Weise umleiten, oder gibt es eine andere Lösung? Mit RewriteCond funktioniert dies immer noch nicht:

# Single URL 

RewriteCond %{HTTP_Host} ^m\.somesite\.com\.au$ [NC]
RewriteRule ^site/somesite/faqs/?$ http://www.somesite.com.au/faqs/ 


# Global subdomain redirect
RewriteCond %{HTTP_Host} ^m\.somesite\.com\.au  [NC]
RewriteRule ^(.*) http://www.somesite.com.au/$1 [NC,L,R=301]

.htaccess-Datei:

# 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


# 301 Redirects
redirect 301 /about-us/go-social/ http://www.somesite.com.au/about-us/
redirect 301 /about-us/rider-profiles/Alex/ http://www.somesite.com.au/about-us/
{...}

# redirect http://m.somesite.com.au/site/somesite/faqs to http://www.somesite.com.au/faqs/
# m.somesite.com.au redirects
RewriteEngine On
Options +FollowSymLinks
RewriteCond %{HTTP_Host} ^m\.somesite\.com.au$ [NC]
RewriteRule ^site/somesite/faqs/?$ http://www.somesite.com.au/faqs/ [NC,L,R=301]


# Global subdomain redirect
RewriteEngine On
Options +FollowSymLinks
RewriteCond %{HTTP_Host} ^m\.somesite\.com.au  [NC]
RewriteRule ^(.*) http://www.somesite.com.au/$1 [R=301]
2
Alan Kis

redirect 301 http://m.somesite.com/site/somesite/faqs http://www.somesite.com/faqs/

Dies funktioniert nicht, da die Quell-URL ein URL-Pfad sein muss, der mit einem Schrägstrich beginnt (wie Sie es für die Weiterleitungen verwendet haben, die funktionieren) , keine absolute URL.

Mit anderen Worten, es sollte wie folgt geschrieben werden (in einer .htaccess-Datei im Dokumentstamm der Unterdomäne):

redirect 301 /site/somesite/faqs http://www.somesite.com/faqs

PDATE: Beachten Sie, dass ich den abschließenden Schrägstrich am Ende der Ziel-URL entfernt habe. Fügen Sie entweder den abschließenden Schrägstrich für beide ein oder lassen Sie ihn für beide weg .

Kann ich eine vollständige URL auf diese Weise umleiten?

Was meinst du mit "vollständige URL"? Dies entspricht Ihren ersten Weiterleitungen. Sie können die vollständige URL umleiten, wenn Sie möchten. (?)

PDATE: Da m.example.com und www.example.com genau auf dieselbe Stelle verweisen (wie in den Kommentaren angegeben), müssen Sie auf Umleitungsschleifen achten, obwohl Sie damit einverstanden sein sollten einer. Dies kann jedoch mit mod_rewrite (siehe unten) besser gemacht werden, da Sie dann gezielt nach dem. Host suchen können.

Mit RewriteCond funktioniert dies immer noch nicht

Beachten Sie, dass Redirect (mod_alias) und RewriteCond/RewriteRule (mod_rewrite) zu verschiedenen Apache-Modulen gehören. Daher sollten Sie niemals externe Weiterleitungen von beiden Modulen mischen , da die Reihenfolge der Ausführung unerwartet sein kann.

Ich gehe davon aus, dass Sie dies bereits tun, aber ... um mod_rewrite zu verwenden, müssen Sie die Rewrite-Engine aktivieren und sicherstellen, dass FollowSymLinks ebenfalls aktiviert ist:

Options +FollowSymLinks
RewriteEngine On

PDATE: (Nach dem Veröffentlichen der .htaccess-Datei) Die Reihenfolge der Anweisungen ist wichtig. Diese externen Weiterleitungen (mit mod_rewrite) müssen vor den WordPress internen Umschreibungen .

Externe Weiterleitungen sollten ganz oben in Ihrer .htaccess-Datei stehen.

Sie müssen die Anweisungen RewriteEngine und Options nur einmal ganz oben in Ihre Datei einfügen.

Entfernen/konvertieren Sie die mod_alias Redirects, da sie möglicherweise mit den mod_rewrite-Weiterleitungen in Konflikt stehen.

RewriteCond %{HTTP_Host} ^m\.somesite\.com.au  [NC]
RewriteRule ^(.*) http://www.somesite.com.au/$1 [R=301]

Leicht aufgeräumt ...

RewriteCond %{HTTP_Host} =m.somesite.com.au
RewriteRule (.*) http://www.somesite.com.au/$1 [R,L]

Entweder lassen Sie alle Ihre Literalpunkte los (\.) und verwenden die Anker start (^) und end ($), oder verwenden Sie einen genauen Übereinstimmung (= Präfix/lexikographisch gleicher Operator) wie ich getan habe. Sie brauchen keine Anker mit dem Muster .*. Es hat sich bewährt, das Flag L mit Weiterleitungen zu verwenden (auch wenn dies die letzte ist).

Testen Sie immer mit temporären (R oder R=302) Weiterleitungen - diese werden im Gegensatz zu permanenten Weiterleitungen nicht vom Browser zwischengespeichert. Wenn Sie zufrieden sind, funktioniert es, und wechseln Sie zu einer permanenten (301) Weiterleitung.

5
MrWhite