it-swarm.com.de

.htaccess leitet alle Seiten auf eine neue Domain um

Welche Umleitungsregel würde ich verwenden, um alle Seiten unter olddomain.example Umzuleiten, um zu newdomain.example Umgeleitet zu werden?

Die Site hat eine völlig andere Struktur, daher möchte ich jede Seite unter der alten Domain auf die neue Domain umleiten Indexseite.

Ich dachte das würde gehen (unter olddomain.example base directory):

RewriteEngine On
RewriteRule ^(.*)$ http://newdomain.example/ [R=301]

Wenn ich jedoch zu olddomain.example/somepage Navigiere, werde ich zu newdomain.example/somepage Umgeleitet. Ich erwarte eine Weiterleitung nur zu newdomain.example Ohne das Seitensuffix.

Wie halte ich den letzten Teil aus?

203
Yuval Adam

Kann so sein:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_Host} ^OLDDOMAIN\.com$ [NC]
RewriteRule ^(.*)$ http://NEWDOMAIN.com [R=301,L]
183
YOU

Die folgende Antwort könnte möglicherweise eine Endlosumleitungsschleife verursachen ...

Hier leitet dieser alles nach dem Domainnamen auf der URL zu genau derselben Kopie auf der neuen Domain-URL weiter:

RewriteEngine on 
RewriteRule ^(.*)$ http://www.newdomain.com/$1 [R=301,L]

www.example.net/somepage.html?var=foo leitet weiter zu www.newdomain.com/somepage.html?var=foo

419
user968421

Um zu verdeutlichen, dass meine ursprüngliche Lösung auch funktioniert, nachdem die im Weg stehende Hosting-Umleitung entfernt wurde:

RewriteEngine On
RewriteRule ^(.*)$ http://newdomain.com/ [R=301]
77
Yuval Adam

Ich habe für meinen Wordpress Blog diesen als .htaccess verwendet. Er konvertiert http: //www.blah.example/asad , http://blah.example/asad , http: //www.blah.example2/asad etc, zu http: //blah.example/asad Vielen Dank an alle Andere Antworten, die ich herausgefunden habe.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

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

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
17
Daantje
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{HTTP_Host} ^olddomain.com$ [OR]
  RewriteCond %{HTTP_Host} ^www.olddomain.com$
  RewriteRule (.*)$ http://www.newdomain.com/$1 [R=301,L]
</IfModule>

Das hat bei mir funktioniert

13
Iana Sergieieva

Es gibt verschiedene Möglichkeiten, dies zu tun, und verschiedene Weiterleitungen, die ich unten aufgeführt habe:

301 (Permanent) Redirect: Verweisen Sie eine gesamte Site dauerhaft auf eine andere URL. Dies ist die am häufigsten verwendete Umleitungsart und in den meisten Situationen hilfreich. In diesem Beispiel leiten wir zur Domain "example.com" um:

# This allows you to redirect your entire website to any other domain
Redirect 301 / http://example.com/

302 (Temporäre) Umleitung: Verweisen Sie eine gesamte Site auf eine andere temporäre URL. Dies ist für SEO-Zwecke hilfreich, wenn Sie eine temporäre Zielseite haben und zu einem späteren Zeitpunkt auf Ihre Hauptzielseite zurückkehren möchten:

# This allows you to redirect your entire website to any other domain
Redirect 302 / http://example.com/

Leiten Sie index.html in einen bestimmten Unterordner um:

# This allows you to redirect index.html to a specific subfolder
Redirect /index.html http://example.com/newdirectory/

Leiten Sie eine alte Datei in einen neuen Dateipfad um:

# Redirect old file path to new file path
Redirect /olddirectory/oldfile.html http://example.com/newdirectory/newfile.html

Zu einer bestimmten Indexseite umleiten:

# Provide Specific Index Page (Set the default handler)
DirectoryIndex index.html
12
RustyIngles

Wenn Sie von einem Ort zu einer Unterdomäne umleiten möchten, können Sie Folgendes verwenden:

Redirect 301 /Old-Location/ http://subdomain.yourdomain.com

9
EmptySD

Wenn sich die neue Domain, zu der Sie Ihre alte Site umleiten, auf einem anderen Host befindet, können Sie einfach ein Redirect verwenden.

Redirect 301 / http://newdomain.com

Dadurch werden alle Anforderungen von olddomain an newdomain umgeleitet.

Die Direktive Redirect funktioniert nicht oder kann einen Redirect loop auslösen, wenn sich Ihre neue und alte Domain auf demselben Host befinden. In diesem Fall müssen Sie mod-rewrite verwenden, um basierend auf umzuleiten den angeforderten Host-Header.

RewriteEngine on


RewriteCond %{HTTP_Host} ^(www\.)?olddomain\.com$
RewriteRule ^ http://newdomain.com%{REQUEST_URI} [NE,L,R] 
6
starkeen

Mein Ruf erlaubt es mir nicht, eine Antwort zu kommentieren, aber ich wollte nur darauf hinweisen, dass die bestbewertete Antwort hier einen Fehler enthält:

RewriteEngine on 
RewriteRule ^(.*)$ http://www.newdomain.com$1 [R=301,L]

sollte einen Schrägstrich vor dem $ 1 haben, also

RewriteEngine on 
RewriteRule ^(.*)$ http://www.newdomain.com/$1 [R=301,L]
5

Meine Lösung als SymLinks funktionierte nicht auf meinem Server, daher habe ich in meinem PHP ein If verwendet.

function curPageURL() {
    $pageURL = 'http';
    if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
    $pageURL .= "://";
    if ($_SERVER["SERVER_PORT"] != "80") {
        $pageURL .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"];
    } else {
        $pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
    }
    return $pageURL;
}
$redirect = str_replace("www.", "", curPageURL());
$remove_http_root    = str_replace('http://', '', $redirect);
$split_url_array     = explode('/', $remove_http_root );


if($split_url_array[0] == "olddomain.com"){
    header("Location: http://www.newdomain.com/$split_url_array[1]");
    die();
}
3
Brent

Ich habe die Antwort von user968421 und die Lösung des Betriebssystems ausprobiert, aber der Browser hat einen Sicherheitsfehler für eine Checkout-Seite gemeldet. Ich kann dir nicht genau sagen warum.

Unser Gastgeber (Site Ground) konnte es auch nicht herausfinden.

Die endgültige Lösung war knapp, aber eine kleine Änderung der Antwort von user968421 (Randnotiz: Im Gegensatz zum OP habe ich versucht, auf die entsprechende Seite umzuleiten, nicht nur auf die Homepage, also habe ich die Rückreferenz beibehalten [the $1 nach der Domain] aus der Antwort von user968421):

RewriteEngine on
RewriteRule (.*) https://newdomain.com/$1 [R=301,L]

Habe den Tweak von diesem htaccess Redirect Generator empfohlen von einem Host Gator Artikel (verzweifelte Zeiten, verzweifelte Maßnahmen, amiright?).

2
J May

Wenn Sie möchten, dass die Umleitung eine neue andere Site (Domain) ohne Parameter oder Seiten vervollständigt, verwenden Sie Folgendes:

RewriteEngine On
RewriteRule / http://new-domain.com/$1? [R=301]
2
MCurbelo

Dies ist ein Fehler in älteren Versionen von Apache (und damit von mod_rewrite), bei dem das Pfadpräfix an den neu geschriebenen Pfad angehängt wurde, wenn es geändert wurde. siehe hier

Ich denke, es wurde in Apache2 V2.2.12 behoben. Es ist ein spezielles Flag erforderlich, das ich hier hinzufügen werde, wenn ich es finde. (Ich denke, es war NP für No Path.)

RewriteRule ^(.*)$ http://newdomain.com/ [??]
2
Question Mark

Unter dem Gesichtspunkt der Benutzerfreundlichkeit ist es besser, wenn Sie auch den Pfad mit der Anfrage senden (d. H. Was Sie gerade haben) und Ihre neue Site damit umgehen lassen:

Sie haben nach "/ products" gesucht.

Leider ist diese Seite weg. Möchten Sie stattdessen "/ new_products" besuchen?

(Und noch besser, dies automatisch zu tun.)

Dies ist natürlich eine Menge Kodierung und Heuristik für eine größere Website, aber meiner Meinung nach würde sich dies in Bezug auf die Benutzerzufriedenheit auszahlen (wenn Ihr sorgfältig gespeichertes Lesezeichen Ihres Traumprodukts Sie nur zur Startseite von newdomain.com führt) ist frustrierend.)

2
Boldewyn

Verwenden Sie bedingte Weiterleitungen mit Options -FollowSymLinks und AllowOverride -Options vom Hoster deaktiviert, wenn auch ein paar lokale Dateien geliefert werden sollen:

Beispiel .htaccess

# Redirect everything except index.html to http://foo
<FilesMatch "(?<!index\.html)$">
    Redirect 301 / http://foo/
</FilesMatch>

In diesem Beispiel wird die lokale index.html bereitgestellt und alle anderen Mitarbeiter auf eine neue Domäne umgeleitet.

1
Sprinterfreak

Die vorherigen Antworten haben bei mir nicht funktioniert.

Ich habe diesen Code benutzt. Wenn Sie OSX verwenden, stellen Sie sicher, dass Sie das richtige Format verwenden.

Options +FollowSymLinks -MultiViews
RewriteEngine on
RewriteCond %{HTTP_Host} ^(www\.)?OLDDOMAIN\.com$ [NC]
RewriteRule (.*) http://www.NEWDOMAIN.com/ [R=301,L]
0
Alfrex92

Einfach so, und die nachfolgende Abfrage von der URL zur neuen Domain wird nicht übertragen.

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule .* https://www.newdomain.com/? [R=301,L]
0
Darksymphony