User since
2003-08-14
87
Artikel
BenutzerIn
Hi Ihr,
meine htaccess-Datei leitet als Error 404 Seite auf ein CGI-Script. Dieses erkennt den Benutzernamen eines Users.
Der User ruft z.B. mit www.domain.de/username auf. Der "username" wird dann erkannt. Das mache ich momentan so:
$url = $ENV{REQUEST_URI};
($u) = $url =~ /\/([^\/]+)\/?$/;
Funktioniert auch hervorragend. Nun möchte ich aber den Aufruf auch über Subdomains ermöglichen.
Wie kann ich diesen kurzen Code so erweitern, dass es auch über z.B. username.domain.de oder www.username.domain.de funktioniert. Die Adressen domain.de/username und domain.de/username/ sollen aber weiterhin funktionieren.
Hat jemand einen Vorschlag oder eine Lösung für mich?
Viele Grüße
Steffen
User since
2003-08-04
2536
Artikel
ModeratorIn
da musst du auf $ENV{'HTTP_HOST'} zurückgreifen, imho, denn da steht der hostname drin, der angefordert wurde.
User since
2003-08-21
2614
Artikel
ModeratorIn
Die Information findest Du in $ENV{HTTP_HOST}.
Siehe auch hier
User since
2003-08-14
87
Artikel
BenutzerIn
Hi Ihr,
erstmal danke für Eure antworten.
Wie kann ich das Ganze jetzt aber genau realisieren, also erkennen wie aufgerufen wurde (ob normal oder über Subdomain)? Wie kann ich das http_host in meinen Code von oben integrieren?
Viele Grüße & vielen Dank
Steffen
User since
2003-08-04
2536
Artikel
ModeratorIn
ich würde überprüfen, ob $ENV{'HTTP_HOST'} deiner hauptdomain entspricht, also example.exmpl oder eben www.example.exmpl. wenn beides nicht zutrifft, kannst du von einer subdomain ausgehen - den usernamen holst du dir da dann so raus:
my ($username) = $ENV{'HTTP_HOST'} =~ m/[^\.]+\.example.exmpl$/i;
wobei du natürlich example.exmpl anpassen musst - damit bekommst du dann eben entsprechend die third-level-domain, wenn du ein www davor hast, setz es mit hinein...
User since
2003-08-14
87
Artikel
BenutzerIn
Hi,
danke, jetzt bin ich schon einen Schritt weiter :-)
Leider ergibt ...
$username = $ENV{'HTTP_HOST'} =~ m/[^\.]+\.domain.de$/i;
Nicht den Benutzernamen (also bei abc.domain.de nur abc), sondern immer 1.
Wo hängt es da denn noch?
Viele Grüße & vielen Dank
Steffen
User since
2003-08-21
2614
Artikel
ModeratorIn
1 ist wahr, das heisst, dass der regulaere Ausdruck matcht. Du solltest dringend ueber regulaere Ausdruecke lesen.
$ENV{HTTP_HOST} =~ m/([^\.]+\.domain\.de)$/i and $username = $1;
\n\n
<!--EDIT|betterworld|1065700860-->
User since
2003-08-04
2536
Artikel
ModeratorIn
deswegen habe ich die klammern gesetzt. im scalaren kontext wird zurückgeliefert, ob er matcht oder nicht, im listenkontext werden die geklammerten werte geliefert:
($username) = $ENV{'HTTP_HOST'} =~ m/[^\.]+\.domain.de$/i;
User since
2003-08-21
2614
Artikel
ModeratorIn
OK, das geht natuerlich auch