Zur Navigation

Unterverzeichnis auf neue Domain umleiten

1 Mathias

Hallo Jörg, hallo Forum,

ich habe wieder einmal ein Problem, da ich mich mit htaccess zu selten beschäftige.

Die Aufgabe ist recht schnell erklärt: Es handelt sich um einen XT-Shop, wo die englische Version auf eine andere URL umgezogen ist.
Ich möchte also folgende Umleitung realisieren:

http://www.server.com/shop/en/ALLES -> http://en.server.com/shop/ALLES

Lösung 1:
Redirect /shop/en/  http://en.server.com/shop/ [R=301,L]
Leitet die Seite um, packt dank Direct-Url-Module jedoch noch ein "?bluegatemapto=category&linkurl=en/" dazwischen. Der link sieht dann so aus:

http://en.server.com/shop/ALLES?bluegatemapto=category&linkurl=en/ALLES.

Wahrscheinlich ist diese Regel im Shop-Verzeichniss der Ziel-URL dafür verantwortlich:
RewriteCond %{REQUEST_FILENAME} !\.html$
RewriteRule ^(.*)$		 			index.php?bluegatemapto=category&linkurl=$1 [qsappend,L]

Lösung 2:
redirectMatch 301 ^/shop/en/(.*) http://en.server.com/shop/$1?
Das funktioniert soweit. Nur hier habe ich das Fragezeichen am Ende der URL, was ich natürlich nicht unbedingt möchte.


Kann mir jemand helfen?


03.10.2010 23:35

2 Jörg Kruse

Redirect /shop/en/  http://en.server.com/shop/ [R=301,L]

Hier vermischt du die Redirect Direktive mit Modrewrite Flags - das kann so nicht funktionieren. Wenn du Modrewrite einsetzt, sollte das L-Flag berücksichtigt werden, so dass hiernach keine Rules mehr ausgeführt werden (sofern letztere weiter unten stehen)

RewriteRule ^shop/en/$  http://en.server.com/shop/ [R=301,L]

04.10.2010 00:20

3 Mathias

Hallo Jörg,

hmm. Genauso habe ich das auch bereits ausprobiert. Da tut sich merkwürdigerweise gar nichts.
Das verwundert mich.

Die Regel ist (nach der RewriteEngine On) die erste Regel.
Auch habe ich sie noch einmal in die htaccess des Shops geschrieben (ohne das "shop/" dann. Aber auch da passiert nichts. Als ob die Regel schlichtweg ignoriert wird.

Das verwirrt mich zutiefst. Ander RewriteRules laufen ja auch, wie die der SEF-Module...

04.10.2010 00:57

4 Jörg Kruse

Sorry, die Regel leitet ja nur das Verzeichnis selbst weiter - mit den Unterseiten sollte es so gehen:

RewriteRule ^shop/en/(.*)$  http://en.server.com/shop/$1 [R=301,L]

Auch habe ich sie noch einmal in die htaccess des Shops geschrieben

Sind in der htaccess Datei in /shop Rules aufgeführt? dann sollte die Weiterleitung dort rein (ohne das "shop/" im Muster). RewriteRules in (htaccess Dateien in) Unterverzeichnissen können die der übergeordneten Verzeichnisse nämlich außer Kraft setzen.

04.10.2010 01:07 | geändert: 04.10.2010 01:07

5 Mathias

Wow. Das war es mal wieder ... nur:

ich musste dies in die htaccess-Datei im Unterverzeichnis /shop/ einschreiben und demnach:

RewriteRule ^en/(.*)$  http://en.server.com/shop/$1 [R=301,L]

Jetzt funktioniert alles wie gehabt. Danke an dieser Stelle.

Weisst Du warum das ganze ein Level höher nicht funktioniert hat?

04.10.2010 01:29

6 Jörg Kruse

Anscheinend durchläuft das Rewrite-Modul nur die Rules der htaccess Datei im untersten Verzeichnis - warum das so ist, kann ich nicht sagen.

04.10.2010 10:54

7 Mathias

Trotzdem vielen Dank für Deine (wie immer) sehr kompetente Antwort.

04.10.2010 12:51

... 2 Jahre und 5 Monate später ...

8 Angela (Gast)

Hallo Jörg und an alle Leser,

ich lese mir das Forum gerade wieder mal durch und habe im Bereich "301 Weiterleitung" bereits einige Varianten versucht. Da es noch gar nicht funktioniert hat, würde ich gerne mein Problem schildern und falls jemand eine Lösung für mich hätte , wäre ich verdammt dankbar.

Ich betreibe innerhalb meiner Webseite einen Blog www.seite-A.de/blog. Diesen habe ich nun auf www.seite-B.de umgezogen. Also ein Unterverzeichnis auf eine neue Domain. In beiden Verzeichnissen gibt es eine ".htaccess" und "Modrewrite" ist möglich.

Die Weiterleitung benötige ich für die bereits existierenden Links auf meinen Blog.

Mein letzter Versuch sah folgendermaßen aus:

AddHandler x-httpd-php5 .php

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule (.*)$ http://seite-B.de/$1 [R=301,L]
</IfModule>

# END WordPress

Doch hiermit wurde die komplette "alte-Seite" umgeleitet und zwar auf die 404-Seite.

In meiner ".htaccess" steht von Haus aus:

AddHandler x-httpd-php5 .php

# 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

Herzlichen Dank für eventuelle Hilfe!

07.03.2013 10:52

9 Horst_M

Zitat von Angela
Mein letzter Versuch sah folgendermaßen aus:
Zwischen zwei Versuchen musst Du den Cache löschen.

Ich verstehe ab und an auch nicht, was so veranstaltet wird. War denn oder ist denn die "www.seite-A.de/blog" bisher unter "www.seite-A.de/blog" erreichbar und ist denn die "seite-B.de" auch unter "seite-B.de" erreichbar, wenn da keine Weiterleitung liegen würde?

Liegt unter "www.seite-A.de/blog" eine htaccess die noch mehr enthält?
Der Blog unter "seite-B.de" ist ein WP?

Dann sollte dessen htaccess erst einmal nicht mehr enthalten, als was sich WP bei der Installation zieht, plus eine Regel für die Standard-Domain. Letztere hätte aber Zeit bis die Einrichtung abgeschlossen ist.

Die erste Zeile ist eigentlich nur erforderlich, wenn man sich die PHP Version aussuchen kann, aber lasse es, falls es nicht stört oder gar doch erforderlich sein sollte:

AddHandler x-httpd-php5 .php

blog als Base hat da nichts mehr verloren, wenn WP nicht mehr im Verzeichnis /blog liegt oder /blog nun Root-Verzeichnis für "seite-B.de" ist:

RewriteBase /blog/

Falls die htaccess unter "www.seite-A.de" noch leer sein sollte (nicht unter "www.seite-A.de/blog"), ansonsten möglichst an den Anfang:

Entweder:
RedirectPermanent /blog/ http://seite-B.de/

Oder:
RewriteEngine On
RewriteRule ^blog/(.*)$ http://seite-B.de/$1 [R=301,L]

Wenn aber alles innerhalb eines Webspaces liegt bzw. es sich um ein Paket mit mehreren Domains handelt, dann:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.seite-A\.de$ 
RewriteRule ^blog/(.*)$ http://seite-B.de/$1 [R=301,L]

07.03.2013 14:28 | geändert: 07.03.2013 15:21

10 Angela (Gast)

Vielen Dank für Deine ausführliche Hilfe. Ich werde mich gleich mal an die Umsetzung machen und hoffe es funktioniert diesmal.

Zu Deinen Fragen:

War denn oder ist denn die "www.seite-A.de/blog" bisher unter "www.seite-A.de/blog" erreichbar und ist denn die "seite-B.de" auch unter "seite-B.de" erreichbar, wenn da keine Weiterleitung liegen würde?
Ja, ohne Weiterleitung sind beide unter ihrer Adresse erreichbar.

Liegt unter "www.seite-A.de/blog" eine htaccess die noch mehr enthält?
Die htaccess liegt unter www.seite-A.de. Der Blog ist eine Seite unter dieser Domain. Nein, mehr als oben angegeben enthält sie nicht.

Der Blog unter "seite-B.de" ist ein WP?
Ja, es sind alles Wordpress-Webseiten. Und sie liegen alle zusammen innerhalb eines Webspaces.

08.03.2013 14:06