Zur Navigation

Umleitung je nach Domain auf Startseite oder andere Domain

1 Morrow (Gast)

Moin,
ich möchte folgendes erreichen:

Bei Aufruf von domain-X.de soll weitergeleitet werden auf domain-X.de/start

Wird domain-X.de mit irgend-etwas aufgerufen soll auf die domain-Z.de/irgend-etwas umgeleitet werden.

Rufe ich domain-Z.de/irgend-etwas oder nur domain-Z.de auf soll der Part mit domain-X.de ignoriert werden.

Vielen Dank

Morrow

03.08.2023 11:11

2 Jörg Kruse

Bei Aufruf von domain-X.de soll weitergeleitet werden auf domain-X.de/start

Wird domain-X.de mit irgend-etwas aufgerufen soll auf die domain-Z.de/irgend-etwas umgeleitet werden.

Wenn mit "irgend-etwas" alle Pfade außer dem der Startseite gemeint sind, kannst du mit mod_rewrite zwei Weiterleitungsregeln erstellen:

RewriteEngine on
# Weiterleiten der Startseite
RewriteRule ^$ https://domain-X.de/start [R=301,L]
# Weiterleiten von allen anderen Seiten
RewriteCond %{REQUEST_URI} !^/start
RewriteRule ^(.+)$ https://domain-Z.de/$1 [R=301,L]

Rufe ich domain-Z.de/irgend-etwas oder nur domain-Z.de auf soll der Part mit domain-X.de ignoriert werden.

Teilen sich die beiden Domains das Wurzelverzeichnis (und damit auch die .htaccess Datei)? dann braucht es für die Weiterleitungen eine zusätzliche Bedingung für den Host (die Domain):

RewriteEngine on
# Weiterleiten der Startseite
RewriteCond %{HTTP_HOST} domain-X.de$
RewriteRule ^$ https://domain-X.de/start [R=301,L]
# Weiterleiten von allen anderen Seiten
RewriteCond %{HTTP_HOST} domain-X.de$
RewriteCond %{REQUEST_URI} !^/start
RewriteRule ^(.+)$ https://domain-Z.de/$1 [R=301,L]

03.08.2023 11:37 | geändert: 03.08.2023 11:39

3 Morrow (Gast)

Hallo vielen Dank,
leider funktioniert es nicht. Ich habe den 2. Block genommen, da die beiden Domains auf den gleichen Root laufen (nur eine htaccess).

Nehme ich den ersten Teil funktioniert es, das domain-X.de auf domain-X.de/start leitet.

RewriteEngine on
# Weiterleiten der Startseite
RewriteCond %{HTTP_HOST} domain-X.de$
RewriteRule ^$ https://domain-X.de/start [R=301,L]

Nehme ich den 2.Teil dazu also:

RewriteEngine on
# Weiterleiten der Startseite
RewriteCond %{HTTP_HOST} domain-X.de$
RewriteRule ^$ https://domain-X.de/start [R=301,L]
# Weiterleiten von allen anderen Seiten
RewriteCond %{HTTP_HOST} domain-X.de$
RewriteCond %{REQUEST_URI} !^/start
RewriteRule ^(.+)$ https://domain-Z.de/$1 [R=301,L]

leitet er gleich auf die domain-Z.de. Egal ob ich domain-X.de oder domain-X.de/irgend-etwas eingebe.

Hättest Du noch einen Tipp?

Danke
Morrow

03.08.2023 19:45

4 Jörg Kruse

Bei domain-Z.de handelt es sich wirklich um eine eigene Domain, und nicht um eine Subdomain von domain-X.de?

Falls die .htaccess Datei noch weitere mod_rewrite oder mod_alias Direktiven enthält, könnten diese auch noch dazwischenfunken. Dann wäre es hilfreich, wenn du den betreffenden Inhalt hier auch noch posten könntest.

04.08.2023 09:34 | geändert: 04.08.2023 09:38

5 Morrow (Gast)

Moin,
ich habe es jetzt mit unterschiedlichen Domains versucht, ging auch nicht.

Hier mal was nach deinem Beispielcode noch kommt:

DirectoryIndex index.php

<IfModule mod_negotiation.c>
    Options -MultiViews
</IfModule>

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
    RewriteRule ^(.*) - [E=BASE:%1]

    # Sets the HTTP_AUTHORIZATION header removed by Apache
    RewriteCond %{HTTP:Authorization} .
    RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    RewriteCond %{ENV:REDIRECT_STATUS} ^$
    RewriteRule ^index\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L]

    # If the requested filename exists, simply serve it.
    # We only want to let Apache serve files and not directories.
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ - [L]

    # Rewrite all other queries to the front controller.
    RewriteRule ^ %{ENV:BASE}/index.php [L]
</IfModule>

<IfModule !mod_rewrite.c>
    <IfModule mod_alias.c>
        RedirectMatch 302 ^/$ /index.php/
    </IfModule>
</IfModule>

<IfModule mod_headers.c>
    <FilesMatch "\.(?i:svg)$">
        Header set Content-Security-Policy "script-src 'none'"
    </FilesMatch>
</IfModule>

Danke

Gruß
Morrow

05.08.2023 11:45

6 Jörg Kruse

Das schaut nach Shopware aus?

Bau mal nach den Weiterleitungen und vor dem Shopware-Code noch so eine Stop-Regel ein:

RewriteRule ^start$ - [L]

... und vorm Testen ggf. noch dn Browser-Cache leeren...

05.08.2023 12:39 | geändert: 05.08.2023 12:43

7 Morrow (Gast)

Hallo,

leider immer noch nicht. Jetzt wird bei Aufruf von domain-X.de ein harter 404 vom Server ausgegeben, nicht der von Shopware.

So habe ich es eingebunden:

...
RewriteRule ^(.+)$ https://domain-Z.de/$1 [R=301,L]
RewriteRule ^start$ - [L]

# BEGIN Shopware
Wenn ich z.B. domain-X.de/TEST eingebe leitet er richtigerweise auch auf die domain-Z.de/TEST, das funktioniert. Nur nicht domain-X.de und domain-X.de/start

Vielleicht noch einen Tipp?

Vielen Dank für Deine Hilfe.

Morrow

05.08.2023 14:58

8 Jörg Kruse

Jetzt wird bei Aufruf von domain-X.de ein harter 404 vom Server ausgegeben

Geh ich recht in der Annahme, dass dabei die gewünschte URL in der Adresszeile des Browsers steht? also https://domain-X.de/start ?

Damit würde die Weiterleitung durchaus wie gewünscht funktionieren, weil der Rewrite-Code von Shopware nicht mehr dazwischenhaut. Allerdings hast du jetzt noch eine zweite Anforderung, die nicht erfüllt wird und die du oben noch nicht erwähnt hattest: die Ziel-URL soll von Shopware veraltet werden. Das genau verhindert aber die Code-Zeile aus meinem letzten Post.

Das macht das ganze Unterfangen noch etwas schwieriger. Der Shopware-Code verändert den Request URI so, dass die zweite Bedingung hier nicht mehr greift:

# Weiterleiten von allen anderen Seiten
RewriteCond %{HTTP_HOST} domain-X.de$
RewriteCond %{REQUEST_URI} !^/start
RewriteRule ^(.+)$ https://domain-Z.de/$1 [R=301,L]

Probier mal stattdessen:

# Weiterleiten von allen anderen Seiten
RewriteCond %{HTTP_HOST} domain-X.de$
RewriteCond %{THE_REQUEST} !\ /start
RewriteRule ^(.+)$ https://domain-Z.de/$1 [R=301,L]

(und die Code-Zeile aus meinem letzten Beitrag muss wieder rausgenommen werden)

05.08.2023 17:10 | geändert: 05.08.2023 17:19

9 Morrow (Gast)

Hallo,

ich sag mal so, das war der entscheidende Hinweis, oberflächlich funktioniert es jetzt.

Aber jetzt gibt es eine Menge Fehlermeldungen in der Dev Console "Access-Control-Allow-Origin' header is present on the requested resource."

Er will alle weiteren Daten wie Fonts, CSS von der Hauptdomain Z laden und schmeißt etliche CORS Fehler raus.

Ich glaube langsam das vergebene Mühe.

Vielen Dank.
Morrow

05.08.2023 19:14

10 Jörg Kruse

Vielleicht hilft noch als zusätzliche Bedingung, dass keine realen Dateien weitergeleitet werden:

# Weiterleiten von allen anderen Seiten
RewriteCond %{HTTP_HOST} domain-X.de$
RewriteCond %{THE_REQUEST} !\ /start
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ https://domain-Z.de/$1 [R=301,L]

... vorausgesetzt, die URLs der CSS-, JavaScript-Dateien etc. werden selbst nicht rewritet.

Sonst bliebe nur, den Webserver so zu konfigurieren, dass die Ressourcen auch von der zweiten Domain geladen werden dürfen

05.08.2023 20:50