# htaccess redirect inkl. subdomains (sub.alt.com/file.html --> sub.neu.com/file.html)



## Eosexperience (29. Februar 2012)

Hallo!

Ich Suche mich mit dem folgenden Problem wie ein Irrer durchs Internet, aber offenbar wollen alle eine Subdomain zu einem Verzeichnis umleiten und niemand eine Subdomain zu einer Subdomain.

*Ich möchte gerne folgendes mittels htaccess erreichen:*
http://alt.com/file.html         --> http://www.neu.com/file.html
http://www.alt.com/file.html --> http://www.neu.com/file.html
http://sub.alt.com/file.html   --> http://sub.neu.com/file.html

*Oder in Worten:*
Alle Zugriffe auf die alte Domain alt.com sollen sowohl mit als auch ohne voranstellendes www auf die neue Domain mit www, also auf www.neu.com, weitergeleitet werden, am besten gleich inkl. der aufgerufenen Datei z.B. www.neu.com/dir/file.html.

Ebenfalls soll ein Zugriff auf eine Datei in einer Subdomain auf dieselbe Datei in derselben Subdomain der neuen Domain umgeleitet werden: sub.alt.com/dir/file.html zu sub.neu.com/dir.file.html.

Ich hoffe ich hab mich einigermaßen verständlich ausgedrückt. ^^
Leider schaffe ich das oben beschriebene Resultat nicht und finde auch keine Informationen, mit denen ich es hinbekomme.

Allerdings: Für Internat Server Errors und unbeschreibliches Fehlverhalten durch htaccess bin ich Experte. 

Ich hoffe jemand kann mir bei meinem Problem weiterhelfen! *dackelblick*
Danke schon mal im Voraus und
Liebe Grüße,
Stefan


----------



## threadi (1. März 2012)

Wie sieht denn dein bisheriger Versuch aus?


----------



## Eosexperience (2. März 2012)

Einer meiner Versuche war der folgende:


```
Options All -Indexes
Options +MultiViews +FollowSymLinks

RewriteEngine on

RewriteCond %{HTTP_HOST} ^domain.de$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^www.domain.de$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^mail.domain.de$ [NC]
RewriteRule ^(.*)$ http://mail.domain.com/$1 [R=301,L]
```

Davor hatte ich folgendes probiert (Internal Server Error):


```
Options All -Indexes
Options +FollowSymLinks

RewriteEngine on
RewriteCond %{HTTP_HOST} ^domain.de [NC][OR]
RewriteCond %{HTTP_HOST} ^www.domain.de [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]
```

Ich hatte auch unterschiedliche Varianten versucht, da im Internet mehrere Schreibweisen zu finden sind.

Die ganz ausgefallenen Versuche und "Tipps" die ich ausprobiert habe, hab ich leider nicht mehr gespeichert.

*Edit:* Diese Varianten unterstützten aber die Subdomains nicht, wenn ich es richtig verstanden habe (daher klappt auch die Weiterleitung von mail.domain.de auf mail.domain.com nicht).

Danke schon mal für die Antwort! 
Liebe Grüße,
Stefan


----------



## threadi (2. März 2012)

Um mal bei deinem Beispiel von oben mit alt.com und neu.com zu bleiben: du müsstest doch nur jeglichen Aufruf der nicht über neu.com kommt umleiten. Also:


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

Damit hast Du aber auch das Subdomain-Problem noch nicht gelöst. Das könntest Du mit "Backreferences" erreichen. Beispiel:


```
RewriteCond %{HTTP_HOST} !(.*).neu.com$ [NC]
RewriteRule ^(.*)$ http://%1.neu.com/$1 [R=301,L]
```

(ungetestet)
Siehe:
http://jamescrisp.org/2009/11/05/percent-number-in-apache-rewrite-rules-mod_rewrite/
http://httpd.apache.org/docs/2.3/mod/mod_rewrite.html#TestString (suche dort nach "backreferences")


----------



## Eosexperience (2. März 2012)

Vielen Dank threadi für deine Antwort!
Dein Ansatz würde für mich logisch klingen, allerdings ist noch irgendwas nicht ganz richtig:

alt.com wird so zu .neu.com umgeleitet (mit führendem Punkt), ebenso bei www.alt.com.
sub.alt.com wird gar nicht weitergeleitet. 

Vielleicht hast du noch eine Vermutung?
Ich suche solange nach backreferences. =)

Danke dir! =)
Liebe Grüße,
Stefan


----------



## threadi (2. März 2012)

Wenn Du deine Recherche beendet hast, solltest Du in backreferences eigentlich die Antwort gefunden haben.


----------



## Eosexperience (2. März 2012)

Hallo noch mal! ^^

Ich fürchte ich hab die Antwort leider nicht gefunden. 
In %1  - %9 sind irgendwelche Werte gespeichert und ebenso in $1 - $9.

$1 ist nehme ich an die angeforderte Datei, bzw. der Pfad zu dieser.
%1 scheint allerdings nicht die Subdomain zu sein.

Ich habe jetzt noch einpaar Tutorials durchgeschaut, aber keines führt zu dem Ergebnis, das ich mir wünsche.


----------



## threadi (3. März 2012)

Ich habe oben


```
RewriteCond %{HTTP_HOST} !(.*).neu.com$ [NC]
RewriteRule ^(.*)$ http://%1.neu.com/$1 [R=301,L]
```

geschrieben. Hier wird alles was nicht von *.neu.com kommt auf *.neu.com weitergeleitet. Das %1 steht dabei für die variable Angabe in der RewriteCondition (wenn ich das richtig verstanden habe). Habe das wie gesagt nicht selbst getestet, aber hast Du?


----------



## Eosexperience (3. März 2012)

Klar hab ich das getestet! 


```
RewriteCond %{HTTP_HOST} !(.*).neu.com$ [NC]
RewriteRule ^(.*)$ http://%1.neu.com/$1 [R=301,L]
```

Obwohl das sehr logisch klingt werde ich so auf .alt.com (mit voranstellendem Punkt) weitergeleitet wenn ich www.alt.com oder nur alt.com aufrufe, bei sub.alt.com passiert nichts.

Scheint so als hätte bei mir %1 bei www und auch beim weglassen einer Subdomain keinen Inhalt, und sobald eine Subdomain angegeben wird, wird die Weiterleitung nicht mehr durchgeführt.

Bisher hatte ich


```
Options -Indexes +FollowSymLinks
```

vor dem Redirect, habe aber gelesen man solle auf jeden Fall +Indexes verwenden.
Leider klappt es aber mit 


```
Options +Indexes +FollowSymLinks
```

auch nicht.

Ich bin sicher htaccess verfolgt irgend eine Logik, ich blicke nur nicht durch.


----------

