Alle Subdomains per rewrite umleiten?!

peterpan

Registered User
Ich möchte Subdomains per .htaccess Datei in ein Verzeichnis leiten.
Für einzelne Subdomains ist das ja kein Problem:

RewriteEngine On
RewriteRule ^verzeichnis/ - [L]
RewriteCond %{HTTP_HOST} subdomain.domain.de(:.+)?$ [NC]
RewriteRule ^(.*) verzeichnis/$1 [L]

Ich möchte aber alle Subdomains erfassen und diese in ein jeweils
gleichnamiges Unterverzeichnis leiten.
Das geht so:

RewriteEngine On
rewritecond %{http_host} !^$
rewritecond %{http_host} !^(www\.)?domain\.de$ [NC]
rewritecond %{http_host}<->%{REQUEST_URI} ^(www\.)?([^.]+).*<->/([^/]+) [NC]

rewritecond %2<->%3 !^(.*)<->\1$ [NC]
RewriteRule ^(.+) /%2/$1 [L]

Funktioniert auch alles wunderbar, aber nur mit Subdomains die weniger als
acht Zeichen haben.
Wisst Ihr warum?
Kann es sein, dass es eine Server Einstellung ist, die es nicht zulässt mehr
als 7 Zeichen auf diese Art zu speichern: (.*)

Ich bin echt schon am verzweifeln

besten dank im vorraus
peter
 
hi :)

an dem hab ich mir auch schon die Zähne ausgebissen. Mein Problem war auch, dass der Request mysubdomain.domain.de/bla.htm nach mysubdomain.domain.de/mysubdomain/bla.htm umegeleitet hat, was zwar funktionierte, aber das zusätzliche Unterverzeichnis war störend.

# SUB.DOMAIN.TLD -> /home/doms/DOMAIN.TLD/subs/SUB
RewriteCond %{HTTP_HOST} ^(..*)\.([^\.][^\.]*\.[^\.][^\.]*)(:80)?$
RewriteRule ^(.*) /home/doms/${lower:%2}/subs/${lower:%1}$1 [QSA]
RewriteRule ^/home/doms/([^/:]*)(:80)?(.*) /home/doms/$1$3 [QSA,L]

yoda~
 
hmmm, vielleicht habe ich mich unklar ausgedrueckt..

wie gesagt, probleme gibs nur mit subs, die mehr wie 7 zeichen haben.

danke, peter
 
Hi!

Bin gerade auf der Suche nach einer Lösungsmöglichkeit für das Problem. Bei mir funktioniert aber nichtmal der oben stehende Code. Wenn ich den in die .htaccess schreibe und dann bla.example.com aufrufe hab ich folgendes im RewriteLog:

Code:
[initial] (3) [per-dir /usr/virtualweb/default/html/] add path-info postfix: /usr/virtualweb/default/html -> /usr/virtualweb/default/html/
[initial] (3) [per-dir /usr/virtualweb/default/html/] strip per-dir prefix: /usr/virtualweb/default/html/ ->
[initial] (3) [per-dir /usr/virtualweb/default/html/] applying pattern '^(.*)' to uri ''
[initial] (4) RewriteCond: input='bla.example.com' pattern='!^$' => matched
[initial] (4) RewriteCond: input='bla.example.com' pattern='!^(www\.)?example\.com$' => matched
[initial] (4) RewriteCond: input='bla.example.com<->/' pattern='^(www\.)?([^.]+).*<->/([^/]+)' => not-matched
[initial] (1) [per-dir /usr/virtualweb/default/html/] pass through /usr/virtualweb/default/html

[initial/redir#1] (3) [per-dir /usr/virtualweb/default/html/] strip per-dir prefix: /usr/virtualweb/default/html/index.html -> index.html
[initial/redir#1] (3) [per-dir /usr/virtualweb/default/html/] applying pattern '^(.*)' to uri 'index.html'
[initial/redir#1] (4) RewriteCond: input='bla.example.com' pattern='!^$' => matched
[initial/redir#1] (4) RewriteCond: input='bla.example.com' pattern='!^(www\.)?example\.com$' => matched
[initial/redir#1] (4) RewriteCond: input='bla.example.com<->/index.html' pattern='^(www\.)?([^.]+).*<->/([^/]+)' => matched
[initial/redir#1] (4) RewriteCond: input='bla<->index.html' pattern='!^(.*)<->\1$' => matched
[initial/redir#1] (2) [per-dir /usr/virtualweb/default/html/] rewrite index.html -> /bla/index.html
[initial/redir#1] (1) [per-dir /usr/virtualweb/default/html/] internal redirect with /bla/index.html [INTERNAL REDIRECT]

[initial/redir#2] (3) [per-dir /usr/virtualweb/default/html/] add path-info postfix: /usr/virtualweb/default/html/bla -> /usr/virtualweb/default/html/bla/index.html
[initial/redir#2] (3) [per-dir /usr/virtualweb/default/html/] strip per-dir prefix: /usr/virtualweb/default/html/bla/index.html -> bla/index.html
[initial/redir#2] (3) [per-dir /usr/virtualweb/default/html/] applying pattern '^(.*)' to uri 'bla/index.html'
[initial/redir#2] (4) RewriteCond: input='bla.example.com' pattern='!^$' => matched
[initial/redir#2] (4) RewriteCond: input='bla.example.com' pattern='!^(www\.)?example\.com$' => matched
[initial/redir#2] (4) RewriteCond: input='bla.example.com<->/bla/index.html' pattern='^(www\.)?([^.]+).*<->/([^/]+)' => matched
[initial/redir#2] (4) RewriteCond: input='bla<->bla' pattern='!^(.*)<->\1$' => matched
[initial/redir#2] (2) [per-dir /usr/virtualweb/default/html/] rewrite bla/index.html -> /bla/bla/index.html
[initial/redir#2] (1) [per-dir /usr/virtualweb/default/html/] internal redirect with /bla/bla/index.html [INTERNAL REDIRECT]

Er machts halt so lange bis MaxRedirects erreicht ist. Hab das Log wegen der Übersicht gekürzt.

Hat jemand ne Idee woran das liegen kann?

Vielen Dank schonmal im Vorraus

Gruß,
Christoph

EDIT:

Habs.
Code:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.example\.com [NC]
RewriteCond %{HTTP_HOST} ^a(.*)-01\.example\.com [NC]
RewriteRule ^(.*) http://xxx.xxx.xxx.xxx/A%1/$1/ [P,L]

Hier wird nicht nur zwischen der Subdomain unterschieden sondern auch zwischen servern. Brauchen das, weil der Hauptserver auf 2 andere Server umleitet.

Wenn man auf andere Server umleitet, muss Apache allerdings mit mod_proxy kompiliert werden, sonst sieht der user die Domain in der Addressleiste.

Wenns nur auf einem Server sein soll setzt man halt
Code:
RewriteRule ^(.*) /A%1/$1 [L]

sollte so funktionieren

Gruß,
Christoph
 
Last edited by a moderator:
Back
Top