Zur Navigation

htaccess / Umleitung mehrerer Domains auf mehrere Unterordner --> Error 404

1 Finn (Gast)

Hallo Jörg, hallo alle,

sorry, wenn ich hier zum xten Mal ein htaccess-Umleitungsthema eröffne - ich habe mich nun seit 5 Tagen schon durch diverse Threads gewühlt (hier wie auch in mehreren anderen Foren), Google gequält, die Apache-Anleitung angeschaut (vom Verständnis derselben red mich mal nicht... ^^ )http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html, diverse Varianten ausprobiert ... aber es klappt einfach nicht, ich kann die vielen Tips nicht auf meinen Fall anwenden. Ich bin mir sicher, es liegt nur an einem kleinen Punkt oder Haken irgendwo (wie das ja häufiger mal so ist).

Kurze Schilderung des Szenarios:
- Ich habe 3 Wordpress-Installationen auf meinem Webspace
- Domain 1 (Installation WP1) habe ich vor ca. 6 Jahren etwas ungeschickt direkt in der document root installiert (d.h., ohne Unterordner). Blöd, ich weiß - Unwissenheit.
- Domain 2 (Installation WP2) kam vor 3 Jahren dazu, diesmal in einem Unterordner WP2. Damit bei Aufruf der Domain2-URL auf diesen Unterordner zugegriffen wird, habe ich über die 1und1-Domainverwaltung einen Redirect auf den Ordner eingerichtet.
- Installation 3 (WP3, Version 3.3) wollte ich nun in einem weiteren Unterordner WP3 aufsetzen, um dort den Relaunch von Domain 2 vorzubereiten.
- WP1 und WP2 haben die gleiche SQL-Datenbank, für WP3 habe ich eine neue SQL angelegt, da die Wordpress-Version 3.3 eine SQL Version 5 verlangt und die erste SQL-Datenbank nur auf 4.xx läuft und das Update auf WP V 3.3 nicht funktioniert. Außerdem wollte ich eine saubere Trennung und die Installation WP2 dann später plattmachen.

Struktur meines Webspace ist also:
/document root: Wordpress-Installation von Domain1 (WP1)
_____/Unterordner WP2: Wordpress-Installation von Domain 2 (WP2)
_____/Unterordner WP3: Wordpress-Installation für Relaunch WP2, derzeit auf Subdomain geleitet

htaccess
In der htaccess im document root (= root von Domain1 / WP1) habe ich folgendes stehen, damit bei Aufruf von Domain2 nicht der WP2-Unterordner sichtbar wird, sondern der Name von Domain2. Das war zumindest die Intention und hat auch immer funktioniert. Ich habe nun aber gelesen, dass das "!" eigentlich eine Verneinung ist...? (wenn Blinde zu sehen versuchen.... ;-))

RewriteEngine On

RewriteCond %{HTTP_HOST} !(^www.domain1.de/WP2-Unterordner/$)
RewriteRule ^(.*)/$ http://www.domain2.de/$1 [R=301,L]

Zusätzlich hatte ich noch weitere htaccess in den Unterordnern WP2 und WP3, habe die aber jetzt mal gelöscht, da ich irgendwo gelesen habe, dass sie die htaccess in der root überschreiben KÖNNTEN... ^^

Problem:
Wenn ich den Ordner
http://www.domain1.de/Unterordner WP3
aufrufen möchte, worin ja die neue Wordpress-Installation WP3 physikalisch liegt, ergibt das einen Error 404 - Not found.

Gleichzeitig wird ändert sich die URL auf
http://www.domain2.de/Unterordner WP3/wp-admin

Das heißt - diesen Unterordner gibt es ja eigentlich nicht... Ich kann mir nur erklären, dass hier die htaccess greift und automatisch den domain1-Namen mit domain2-Namen ersetzt und dann auf den Ordner leitet (??).
Oder hat es was mit dem Redirect in der Domainverwaltung bei 1und1 zu tun?
Irgendwie verstehe ich das Zusammenspiel zwischen Redirect beim Hoster und htaccess nicht so ganz (Mist! ;-))

Lösungsansätze:
Ich habe dann probehalber versucht, das gleiche Szenario wie für meine laufende Domain2 mit einer bisher nicht genutzten Subdomain aufzusetzen, d.h. die entsprechende, korrekte Weiterleitung in den Unterordner WP3 beim Hoster eingestellt und die Umbenennung in die htaccess eingetragen. Wie ich es für Domain 2 gemacht hatte und es auch immer noch funktioniert.
Resultat: gleiche Fehlerkette wie oben beschrieben. Selbst ein direkter Aufruf der Subdomain mit installierten WP3.3 leitet automatisch auf

http://www.domain2.de/Unterordner WP3/wp-admin

Auch wenn ich die neue Startseite aufrufen will, kommt ein Error 404.

Sorry für den Monsterpost, aber ich kriegs einfach nicht hin. Kann mir jemand bitte etwas Hirn leihen? ;-)

Danke & Gruß
Finn

03.01.2012 13:24

2 Jörg

- Domain 1 (Installation WP1) habe ich vor ca. 6 Jahren etwas ungeschickt direkt in der document root installiert (d.h., ohne Unterordner). Blöd, ich weiß - Unwissenheit.

Das kannst du ja nachträglich ändern: Die Dateien und Verzeichnisse von Domain 1 in einen eigenen Unterordner kopieren und diesen als DocumentRoot-Verzeichnis der Domain definieren; wenn die Änderung wirksam geworden ist (1und1 gibt da immer einen Zeitraum an), und alles ordungsgemäß funktioniert, kannst du die alten Dateien im darüberliegenden Verzeichnis löschen.

Das hat dann den Vorteil, dass die Direktiven in der htaccess Datei sich nicht mehr auf die anderen Domains auswirken

RewriteCond %{HTTP_HOST} !(^www.domain1.de/WP2-Unterordner/$)

HTTP_HOST beinhaltet nur den Domainnamen, keine Dateipfade! die Klammern sind hier auch unnötig

Zusätzlich hatte ich noch weitere htaccess in den Unterordnern WP2 und WP3, habe die aber jetzt mal gelöscht, da ich irgendwo gelesen habe, dass sie die htaccess in der root überschreiben KÖNNTEN... ^^

Ja, aber eben nur in Bezug auf Requests, die den jeweiligen Unterordner betreffen

Ich habe auf die Schnelle noch nicht alles nachvollziehen können, aber vielleicht löst sich das Problem ja schon durch die Punkte, die ich hier soweit kommentiert habe :)

03.01.2012 17:53

3 Finn (Gast)

Erstmal vielen Dank für die superschnelle Antwort, Respekt! :-) - ja, ich weiß, ein Monsterpost. Ich hab mir halt gedacht, beschreib mal alles aus diesem Wust aus Halb-bis-Gar-Nix-Wissen und Rumprobieren…

Das kannst du ja nachträglich ändern: Die Dateien und Verzeichnisse von Domain 1 in einen eigenen Unterordner kopieren und diesen als DocumentRoot-Verzeichnis der Domain definieren (…)

Mach ich auf jeden Fall (am WE), das stört mich schon lange. Wo definiere ich den Unterordner als DocumentRoot-Verzeichnis? Bei 1und1 in der Domainverwaltung, nehm ich an?
Muß ich dann nicht irgendwas in der SQL anpassen oder ist der das egal?


RewriteCond %{HTTP_HOST} !(^www.domain1.de/WP2-Unterordner/$)
RewriteRule ^(.*)/$ http://www.domain2.de/$1 [R=301,L]

HTTP_HOST beinhaltet nur den Domainnamen, keine Dateipfade! die Klammern sind hier auch unnötig

Hm… hab Erbarmen mit einem Nichtwisser :D - was hab ich denn da eigentlich geschrieben? Wenn die Domain (http_HOST) nicht (!) Domain1 ist, leite permanent (R=301) auf Domain 2 um??? Und die Unterordner kann ich vergessen?

Könntest du mir vielleicht noch kurz erklären, wie das Zusammenspiel zwischen Redirect beim Hoster und htaccess ist? Was kommt da zuerst, wer beeinflusst wen?

D.A.N.K.E. :)

04.01.2012 12:09

4 Jörg

Zitat von Finn
Das kannst du ja nachträglich ändern: Die Dateien und Verzeichnisse von Domain 1 in einen eigenen Unterordner kopieren und diesen als DocumentRoot-Verzeichnis der Domain definieren (…)

Mach ich auf jeden Fall (am WE), das stört mich schon lange. Wo definiere ich den Unterordner als DocumentRoot-Verzeichnis? Bei 1und1 in der Domainverwaltung, nehm ich an?

Ja

Muß ich dann nicht irgendwas in der SQL anpassen oder ist der das egal?

Die Datenbankanbindung hat mit dem DocumentRoot nichts am Hut - die kannst du so lassen.


RewriteCond %{HTTP_HOST} !(^www.domain1.de/WP2-Unterordner/$)
RewriteRule ^(.*)/$ http://www.domain2.de/$1 [R=301,L]

HTTP_HOST beinhaltet nur den Domainnamen, keine Dateipfade! die Klammern sind hier auch unnötig

Hm… hab Erbarmen mit einem Nichtwisser :D - was hab ich denn da eigentlich geschrieben? Wenn die Domain (http_HOST) nicht (!) Domain1 ist, leite permanent (R=301) auf Domain 2 um???

Der Unterordner ist Bestandteil des REQUEST_URI, nicht von HTTP_HOST. Zu den Bestandteilen der URL siehe auch Wikipedia:

http://de.wikipedia.org/wiki/Uniform_Resource_Locator

Die Bedingung in dem Codeauszug trifft also immer zu, weil es einen solchen Host mit Pfadangabe nicht geben kann.

Und die Unterordner kann ich vergessen?

Wenn du www.domain1.de/WP2-Unterordner/ weiterleiten willst nach www.domain2.de/, solltest du das so probieren:

RewriteCond %{HTTP_HOST} ^www\.domain1\.de$
RewriteCond %{THE_REQUEST} /WP2-Unterordner/
RewriteRule ^WP2-Unterordner/(.*) http://www.domain2.de/$1 [R=301,L]

Die zweite RewriteCond wird hierbei als Abbruchbedingung benötigt, damit es zu keiner Endlosweiterleitung kommt

Nachdem du der Hauptdomain ein eigenes DocumentRoot-Verzeichnis spendiert hast, braucht es solche Verrenkungen aber nicht mehr

Könntest du mir vielleicht noch kurz erklären, wie das Zusammenspiel zwischen Redirect beim Hoster und htaccess ist? Was kommt da zuerst, wer beeinflusst wen?

Kommt darauf an, was mit "Redirect beim Hoster" gemeint ist

04.01.2012 19:00 | geändert: 04.01.2012 19:03

5 Finn (Gast)

Hallo Jörg,

jetzt hab ich mal gebastelt und alles von Domain1 aus der Webspace-Document-root in den Unterordner WP1 geschoben und es bei 1und1 entsprechend definiert (mit Redirect meinte ich diese Definition, dass die Domain1.de sich im Ordner /wp1 befindet).

Ich bekomme jetzt bei Aufruf der alten Domain folgenden Fehler:
Moved Permanently

The document has moved here. [<-- Anm: "here" ist wieder der Domainname]

Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.

Wahrscheinlich, weil ich die htaccess auf oberster Ebene (Webspace Document-Root) noch nicht angepasst habe, oder?

Diese lautet momentan so (deine Änderungen noch nicht versucht):

RewriteEngine On
RewriteCond %{HTTP_HOST} !(^www.domain1.de/wp2/$)
RewriteRule ^(.*)/$ http://www.domain2.de/$1 [R=301]
RewriteCond %{HTTP_HOST} !(^www.domain1.de/wp3/$)
RewriteRule ^(.*)/$ http://www.domain3.de/$1 [R=301,L]

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

# Force www
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

# lässt andere Datei-Endungen für PHP4-Skripte zu:
# (verwenden Sie es nicht zusammen mit o.g. x-mapp-php5)
AddType x-mapp-php4 .php .php4 .htm .html

Ja, ich weiß - sehr unprofessionell ;-)

Hatte mit Domain 3 sogar funktioniert, nachdem ich bei
RewriteRule ^(.*)/$ http://www.domain2.de/$1 [R=301]
das "L" rausgenommen hatte. Leider nur im FF, nicht im IE, warum auch immer *kopfkratz*...

So wie's aussieht, werden die Probleme immer mehr... ;-)

Danke, Finn

07.01.2012 12:11

6 Jörg

Im Grunde genommen benötigst du die htaccess Datei im oberen Verzeichnis auch gar nicht mehr; mal zu den einzelnen Abschnitten:

1. die Weiterleitungen ganz am Anfang sind jetzt nicht nur sinnlos geworden, sondern verursachen womöglich auch die genannten Probleme -> löschen

2. die Wordpress Rules, die sich auf Domain1 beziehen, musst du natürlich in die htaccess Datei verschieben, welche im neuen DocumentRoot-Verzeichnis von Domain1 liegt!

3. die "Force www" Rule würde ich in die htaccess Dateien der einzelnen DocumentRoot-Verzeichnisse verschieben

4. die AddType Direktive könntest du ebenfalls verschieben, aber auch in der oberen htaccess Datei belassen, da sich diese ohne Nebenwirkungen auf dei darunter leigenden Verzeichnisse vererbt. Ich halte es allerdings für fraglich, die PHP-Anwendungen auf das veraltete PHP4 festzunageln, und würde eine Änderung auf PHP 5 empfehlen. Neuere Wordpress-Versionen lassen sich denke ich auch gar nicht mehr mit PHP4 betreiben?

Leider nur im FF, nicht im IE

Browser laden Weiterleitungen u.ä. mitunter gerne aus ihrem Cache, deswegen vor dem Testen den Browser-Cache leeren

07.01.2012 13:29 | geändert: 07.01.2012 13:32

7 Finn (Gast)

Hallo Jörg,

es hat geklappt! Habe nun die htaccess in der obersten Ebene komplett gelöscht, nun funktionieren alle Seitenaufrufe der Domains 1-3 problemlos (und in allen Browsern :-))

Was Php4 betrifft, hast du völlig recht. Ich habe vor einer Woche den gesamten Webspace über 1und1 auf PHP5 umgestellt und dachte, da Domain 1 schon so alt ist (und die zugehörige Wordpress-Installation auch), müsste ich diese PHP4-Rule einbauen, damit das noch läuft. Aber es geht so auch.

Die einzelnen htaccess-Dateien für die einzelnen Domains lege ich dann dort jeweils in den Domain-Root-Ordner.
Gehört in diese außer den Wordpress-Rules und "Force www" noch was anderes rein, was ich unbedingt aus deiner Sicht einbauen sollte?

Danke dir, dass du mich vor weiteren Hirnverrenkungen mit der htaccess bewahrt hast :D

Grüße, Finn

09.01.2012 14:00

8 Jörg

da Domain 1 schon so alt ist (und die zugehörige Wordpress-Installation auch)

Aber du installierst hoffentlich die (Sicherheits-)Updates für Wordpress?

Gehört in diese außer den Wordpress-Rules und "Force www" noch was anderes rein, was ich unbedingt aus deiner Sicht einbauen sollte?

Im Normalfall muss da nicht mehr rein.

09.01.2012 17:27

9 Finn (Gast)

Aber du installierst hoffentlich die (Sicherheits-)Updates für Wordpress?

Bei den neuen Seiten: ja - bei dieser alten: nein. Das ist schon so alt, da müsste ich alles neu installieren und das spar ich mir - ist auch kein Blog, sondern als CMS genutzt, also alle Kommentare aus etc. Ich war schon nahe dran, die Domain komplett zu löschen, weil ich sie eben nicht mehr nutze, aber aus nostalgischen Gründen habe ich es einfach stehen lassen... ;-)

Ich befürchte, du sagst jetzt, ich öffne damit potentiellen bösen Menschen :D Tür und Tor zu meinem Server...? Stimmt's?

Gruß
Finn

11.01.2012 10:53

10 Jörg

Es gibt eine Menge Bots, die nach anfälligen Webanwendungen suchen. Ich würde mich hier nicht darauf verlassen, nicht gefunden zu werden.

11.01.2012 14:13