Wofür die Provider dieser Welt zur Kasse bitten, das kann man sich dank JavaScript auch selbst kostenlos erstellen. @-Domains zur eigenen Domain – und zwar unendlich viele. Wie es funktioniert, zeigt Ihnen dieser Workshop.
Grundlegendes zur Realisierung von @-Domains
Um @-Domains zu realisieren, müssen Sie zu allererst eine neue HTML-Seite anlegen, die beim Aufruf Ihrer Domain vor jeder anderen Seite aufgerufen wird. Diese Datei heißt im Normalfall “index.html”. Ihre eigentliche Startseite müssen Sie ggf. zum Beispiel in “index2.html” umbenennen.
Die neue “index.html”-Seite dient nun als Umleitung. Beim Aufruf Ihrer Domain wird per JavaScript überprüft, ob ein @-Paramter mit eingegeben wurde oder nicht. Im Quelltext der Startseite werden dazu folgende Zeilen eingefügt:
<script language=”javascript”>
var url = window.location.href;
if(url.charAt(url.length- 1)== ‘/’)
{ url= url.substring(0, url.length- 1); }
url = url+ ‘/’;
var slash = url.indexOf(“//”) + 2;
var zeichen = url.indexOf(“@”);
if(zeichen > 0) {
var atpart= url.substring(slash, zeichen);
window.location.href= “http://www.meine-domain/” + atpart + “/”;
}
else { window.location.href= ‘http://www.meine-domain/index2.html’; }
</script>
Im Beispiel wird die Eingabe von “forum@meine-domain.de” den Besucher nun zum Unterordner “http://www.meine-domain.de/forum/” umleiten. Falls die Domain ohne @-Bestandteil aufgerufen wurde, wird der Besucher zur Startseite (im Beispiel “index2.html”) weitergeleitet.
Erweiterte Parameter-Abfrage
Einziges Problem bei dieser Umsetzung ist, dass der Besucher auch bei Eingaben wie beispielsweise “xyz@meine-domain.de” zum entsprechenden Unterordner umgeleitet wird – auch wenn dieser gar nicht existiert. Die Folge sind unschöne Fehlermeldungen. Umgangen werden kann dies nur, wenn Sie jede mögliche @-Domain einzeln definieren. Über eine JavaScript-Abfrage mit dem Befehl “switch” können Sie beliebig viele @-Domains erzeugen:
<script language=”javascript”>
var url = window.location.href;
if(url.charAt(url.length- 1)== ‘/’)
{ url= url.substring(0, url.length- 1); }
url = url+ ‘/’;
var slash= url.indexOf(“//”) + 2;
var zeichen= url.indexOf(“@”);
if(zeichen > 0) {
var atpart= url.substring(slash, zeichen);
switch(atpart) {
case “aktuelles”:
window.location.href = “http://www.meine-domain.de/aktuelles.html”;
break;
case “seite2″:
window.location.href = “http://www.meine-domain.de/unterordnerxy/seite.html”;
break;
default:
window.location.href = “http://www.meine-domain.de/fehler.html”;
break;
}
}
else { window.location.href= ‘http://www.meine-domain/index2.html’; }
</script>
Bei dieser Abfrage wird der Besucher nur dann zu einer bestimmten Seite umgeleitet, wenn diese explizit vorher angegeben wurde. Jede @-Domain wird dabei über folgenden Quelltext erzeugt:
case “name-der-@-Domain“:
window.location.href = “Weiterleitungs-Ziel-Url“;
break;
Folgende Angabe definiert die Seite, die angezeigt werden soll, falls zwar eine @-Domain eingegeben wurde, diese aber ungültig (also nicht definiert) ist:
default:
window.location.href = “http://www.meine-domain.de/fehler.html”;
break;
Weiterführende Möglichkeiten
Statt den Besucher über den Befehl “window.location.href” zu einer anderen Seite weiterzuleiten, können Sie an den entsprechenden Stellen auch beliebige andere JavaScript-Befehle einsetzen.
Statt einem @-Zeichen könnte beispielsweise auch ein beliebiges anderes Zeichen verwendet werden. Das @-Zeichen ist allerdings zu empfehlen, da diese Domain-Art auch von großen Providern vermarktet wird und so bei Besuchern ein gewisser Bekanntheitsgrad vorrausgesetzt werden kann.
Bei der Verwendung der @-Domain-Technik sind Ihrer Fantasie keine Grenzen gesetzt.
Diese Artikel könnten Sie interessieren:
Weiterleitungen realisieren
(Gast | 11.01.03)



Sehr guter Artikel und ich denke auch sehr nützlich. Ich habe auch schon oft gesehen, dass die Provider innerhalb Ihrer Angebote eine begrenzte Anzahl an @-Domains erlauben. Was ja nur wieder eine Abzocke darstellt. Die Provider ermöglichen die @-Domains genau wie im Artikel mit einem einfachen JavaScript.
Ich stimme Andreas absolut zu. Wirklich interessant! Aber ein wenig umständlich, da geht es über das Webinterface der Hoster bequemer. Aber ich denke mal, im Endeffekt sind die “offiziellen @-Adressen” der Hoster auch nix anderes als das, was Daniel im Workshop vorgestellt hat.
Nochmals meine Gratulation zu diesem Beitrag!
Jonas
Aber das Problem liegt doch auf der Hand – was ist wenn der Besucher kein Javascript aktiviert hat? Ich denke das dies bei einem nicht unerheblichen Teil der Fall ist. Und was dann? Jeder der kein Javascript hat sieht bei dieser Art der @-Domains in die Röhre, sehe ich das richtig?:-(
Man kann auch mit parse_url (‘url’); die URL auslesen. Damit müsste man den gleichen Effekt mit PHP erzielen können – Wenn ich mal etwas mehr Zeit habe klemm’ ich mich mal dahinter…
PHP hätte hier halt den Vorteil, daß man die Umleitung auf der normalen Startseite realisieren kann (also kein Referer) und daß es Serverseitig ist, also bei jedem User funktioniert.
Hier der Link:
http://www.php.net/manual/de/function.parse-url.php
Grusz,
L2
Letzte Änderung von Malte Höltken am 13.01.03, 03:58.
<<Jeder der kein Javascript hat sieht bei dieser Art der @-Domains in die Röhre, sehe ich das richtig?>> Wie gesagt, benutzen die Provider die ich kenne ebenfalls JavaScript für die @Domains. Von daher macht das wenig unterschied.
Die serverseitige Lösung würde mich auch reizen, wäre glatt ein weiteres Tutorial wert! ;-)
Na ich könnte eins schreiben, aber vor Mitte/Ende März wird nix draus, wegen den Klausuren
Grusz,
L2
Ich finde die Variante mit JavaScript interessant – die Überlegung via PHP wäre aber sicherlich eleganter und wie bereits angesprochen vielfältiger und sicherer zu verwenden.
Würde mich freuen, diesbezüglich noch einmal etwas hier zu lesen ;-)
Das wirst Du mit Sicherheit…(L)
Wenn nicht von Malte, dann von mir oder Andreas! ;D
Neben den Nachteilen von JS hat es einen Vorteil: Diese Lösung funktioniert nun wirklich auf jedem noch so kostenlosen Provider ohne PHP-Unterstützung etc…
Und wenn die Leute ohne JS-Aktivierung auf die @-Domains verzichten müssen, ist das ja nun auch nicht gerade ein Drama – müssen Sie halt wieder lange URLs eingeben ;-)
Da hat der Herr Korioth mal wieder recht! Aber wer die @-Domains professionell nutzen will, sollte schon auf eine serverseitige Lösung setzen. ;-)
Wenn mir jemand so ein PHP-Beispiel schicken könnte würde ich mich mal an ein Tutorial heranwagen.
Ich hab das aber bei php.net noch gar nicht geblickt.
Es sollte aber ein Beispiel mit @-Domains sein.
Schon mal vielen Dank
Ich gehe mal davon aus, dass es solch ein Script noch gar nicht gibt. Es sollte aber recht einfach zu realisieren sein.
PS: Vorher solltest Du jedoch Deine Homepage von den ganzen “hässlichen” Webmart-Tools befreien! ;D
Also ich hatte noch keinen bock/Zeit etwas an meiner page zu machen.
Aber ich werde sie von Zeit zu Zeit alle ersetzen. ;D
Wenn mir vielleicht jemand dann bitte nur die code zeilen erklähren würde, weil mein englisch is noch net so gut
Zitat: “Wenn mir jemand so ein PHP-Beispiel schicken könnte würde ich mich mal an ein Tutorial heranwagen.”
Scherzkeks – dann ist das Tutorial ja schon so gut wie fertig…
;D
Hehe ich verstehe ja die Funktion Parse.url net einmal:-|
Ich kann nähmlich noch nicht so gut englisch
wenn mir jemand erklähren kann wie ich die URL auslese und dann verändere währe das gut
Hi,
da fällt mir ein, könnte man nicht auch so Subdomains erstellen mit der Zerlegung von einer Adresse per PHP?
Wenn vor der Adresse (z.Bsp.: all4homepage.de) ein Punkt und davor ein Text ist (z.Bsp.: dein-name.all4homepages.de), müsste man dann in ein Unterverzeichnis umgeleitet werden. Damit wären die Subdomains von 1und1 total sinnlos und man könnte ewig viele machen und nicht nur zehn!
Falls ihr dazu etwas schreiben würden, ich würde mich freuen!
Nee ich glaube das geht nicht, weil wenn man irgent eine Seite mit einer undefinierten Subdomain aufruft kommt man nicht auf die Startseite wie es bei @-Domains der Fall ist:-|
Nein, Subdomains, also alles was mit einem Punkt (“.”) abgetrennt wird, kann mit dieser Methode NICHT erzeugt werden.
Habs gerade nochmal extra ausprobiert…
kannst du mir mal das script schicken?
Weil ich blicke die funktion net dann kann ich mir das mal ansehen auch wenn es nicht funktioniert (in dem fall nicht schlimm wein ich es weiß)
Danke
Also prinzipiell kommt man schon auf die normale Startseite, wenn man eine Subdomain eingibt, die nicht existiert.
So einfach scheint es allerdings nicht zu sein. Ich wüsste noch nicht mal, wie ich die komplette URL mit PHP rauskriege.
Oben wurde bereits erwähnt, dass man dies mit parse_url erreichen kann. Also kann man die einzelnen Teile doch definieren (www.dein-name.all4homepages.de): All4Homepages.de und Dein-Name.
Aber leider bin ich kein PHP-Profi! ;-)
Ahso, stimm. Na dann ist’s ja klar. ;D
Hä ich kapier nix ich versteh die funrtion parse-url noch nicht einmal
kann mir das mal einer erklähren???:-|
Na nicht garz. mit parse_url() kann ich eine URL zerstückeln, bekomme sie aber noch nicht vom Browser. Es gibt viele vordefenierte Variablen in PHP, wo URL’s drinstehen. ein Blick in die phpinfo() hilft einem da weiter. Aber das sind nur die Adressen, wo sich das Script befindet und keine Parameter davor (also vor dem @-Trenner). Das Problem liegt also darin, daß ich nicht an das @ herankomme – mir ist dazu bisher noch nichts eingefallen. Die URL zu parsen ist kein Problem. Das steht auch sehr ausführlich in der php.net doku, ich meine auch in der FAQ von de.comp.lang.php. So weit wie ich bin, müsste ich die URL mit Javascript auslesen und dann mittels URL-codierung an ein PHP-Script schicken um sie dort zu parsen. Das wiederum ist allerdings vollkommener Schwachsinn, weil ich das ganze dann a) komplett in Javascript schreiben und b) immer noch eine Clientseitige Lösung habe. und gerade davon wollen wir ja ab. Ich muß noch mal ein bisschen rumsuchen, aber das Problem krieg ich schon noch. Nur hats hier doch keiner Allzueilig damit oder? Dann nämlich müsste ich das Tutorial abgeben (schreibe bis zum 19.03. Klausuren :-/ )
Achja: eine phpinfo() ausgabe findet Ihr bei http://www.soeh-t.de/php_info.php
FAQ dclp: http://www.dclp-faq.de
Doku: http://www.php.net
Wäre nett wenn mir jemand was schicken könnte, wenn er weiß wie ich die URL kriege. Den Rest des Tutorials ist nämlich schon fertig :-)
Grusz,
L2
Ähm, ich habe von einer vordefinierten Variable $HTTP_ADDR gelesen, könnte es sein, dass damit die Dokumenten-URL gemeint ist? Aber ich weiß, dass es irgendwie möglich ist, die URLs eines Dokuments in einer Variablen anzuzeigen …
Jonas
Ja Die URI des Dokumentes ist kein Problem ($_SERVER["REDIRECT_URI"] beispielsweise) Aber HTTP_ADDR, so wie HTTP_ADR scheint leer zu sein. Bekomme da auf jeden Fall weder einen String noch sonstwas raus.
Danke trotzdem
Grusz,
L2
Also ich habe bei einem “Mitbewerber” mal von einer Funktion gelesen, die angeblich die gesamte URL auslesen soll:
$url=explode(“/”,$REQUEST_URI);
$url[0] => http://www.domain.tld;
Aber soweit ich das nachvollziehen kann, hat der Autor dieses Artikels wohl nicht richtig recherchiert, denn damit bekomme ich nur den Dateinamen und NICHT die Domain inkl. “http://…”! :-|
So erhält man die angeforderte Seite in PHP4. Das Javascript ist natürlich nicht notwendig und wir nur für die Alert-Box verwendet.
<html>
<script language=”javascript”>
protocol = ‘<?= $SERVER_PORT == 80 ? “http://” : “https://” ?>’;
msg = protocol+’<?=$HTTP_HOST.$REQUEST_URI?>’;
alert(msg);
</script>
</html>
;-)
Na Toll. Die URL kenne ich doch, ich bin auf der Suche nach den Parametern, die in einer Adresse angegeben werden… Also alles nach dem Motto foo@soeh-t.de” target=”_blank”>http://foo@soeh-t.de (Dein Script steht momentan auf soeh-t.de/index.php) Nur leider hilft es mir in keinster weise weiter…..
Aber ich habe mal de.comp.lang.php.misc gefragt und dort ist man einhelliger meinung, diesen Part der URL nicht mittels PHP auslesen zu können… Es scheint, als ob ich an die erste unüberwindbare Grenze von PHP gestossen wäre…
Grusz,
L2
Eigentlich schade,
sowas hätte ich gebraucht :-(
Wieso Dienste überhaupt @-Domains anbieten, kapier ich nicht, da viele JavaScript nicht an haben. Mit PHP wäre eine optimale Lösung zustande gekommen. Müsste doch aber gehn, oder?
Naja,
Friedrich
http://www.selfphp.info/funktionsreferenz/url_funktionen/parse_url.php
da steht im Beispiel auch was vor dem @. Könnte das was werden?
Ja, wunderbar. Wir missbrauchen einfach den User als @-Domain! :-)
Aber funktionieren müsste es doch, oder? Wieso darf man nicht den User dazu benutzen? Merkt doch keiner :-)
Fred
Im Endeffekt kommts auf das selbe raus. Du kannst nur nicht einfach wild URLs parsen, die Du nicht kennst.
Grusz,
L2
Ich will euch ja die Illusion nicht zerstören, jedoch zweifel ich ernsthaft an, dass es eine PHP-Lösung gibt:
1) Man bekommt bei solchen Aufrufen wie xxxx@fffcc44.de durch den Browser den Verweis auf die Startseite (also fffcc44.de) und
2) das PHP-Script hat in allen Url-Variablen dann nur “” bzw. “http://www.fffcc44.de” stehen, da der Browser diese Seite aufruft
3) da wir nicht wissen, welche @-Domain der User aufruft, kann keine PHP-Lösung existieren
4) dadurch können wir auch keine Url per parse_url zerlegen
5) Ich habe bisher noch keinen Anbieter gesehen, der eine Server-seitige Lösung hat. (Bei allen wurde nur die Startdatei umbenannt und eine neue Datei mit dem JS zwischengeschaltet)
Sollte ich mich allerdings täuschen, lasse ich mich gerne belehren ;D
Letzte Änderung von Christian Mehler am 27.04.03, 15:00.
Die Angabe vor dem @ ist ja nichts anderes als der Benutzername. Ist eine Adresse passwortgeschützt, so kann ich diese mittels “user:pass@domain” aufrufen.
Der Browser ruft in so einem Fall die URL hinter dem @ auf und sendet im Header die “Authorization”-Zeile mit der Angabe user:pass (Base64-kodiert). In PHP gibt es sicherlich eine Umgebungsvariable, die den Username enthält. Und wenn dem so ist -> Bingo! ;)
Das Problem besteht darin, dass schon der Browser deine angeführte Variante eines ftp-Zugriffes entsprechend umcodiert. Selbst der Sever bekommt dabei nie eine Anforderung der Form “user:pass@domain”, sondern z.B. im Falle von ftp wird ein Zugriff auf den ftp-Server hergestellt und dannn (vom Brwoser zerpflückt) hintereinander Username und PW gesendet. Zudem habe ich vorhin mir alle bekannten Zugriffsvariablen auf den Dateinamen ausprobiert, und überall war das @ und der Benutzername weg (vielleicht gibt es aber noch eine Unbekannte? Weiß die jemand?).
@Christian: das hat mit FTP nichts zu tun! Das ist eine ganz normale URL für das HTTP-Protokoll. Und so wie der Name der Clientsoftware in $HTTP_USER_AGENT zu finden ist, gibts mit Sicherheit eine Variable für den Benutzernamen. Ich glaube $REMOTE_USER oder ähnlich. Habe aber im Moment leider keine Zeit für Experimente …
@Thomas, dann beziehst du dich gerade auf die HTTP_AUTHENTIFIZIERUNG? Das wäre dann $_SERVER["REMOTE_USER"]. Aber selbst dort wird es vom Browser zerpflückt (soweit wie ich weiß), und es geht hierbei ja schließlich nicht darum eine neuen Aufruf von geschützten Verzeichnissen (per htaccess) zu schreiben, sondern die “schnöden” @-Domains mit PHP zu realisieren.
*Habs übrigens ausprobiert: Habe selbst bei solchen Aufrufen keinen Inhalt in Remote_User gehabt…*
Wenn überhaupt, dann geht es nur über eine Aufforderung zur Authentifizierung mittels .htaccess oder durch Senden des Statuscodes “401 Unauthorized” unter Verwendung der header()-Funktion. Der Browser antwortet erst dann mit dem Teil vor dem “@” (was ja nichts anderes als der Benutzername ist).
Soweit so gut … das wäre kein Problem, da technisch leicht machbar.
Aber an einer Sache scheitert das dann doch : beim Aufruf der URL ohne “@”-Bestandteil möchte der Browser natürlich auch Benutzername/Passwort haben und öffnet das altbekannte Dialogfenster … naja und wer will das schon in diesem Fall angezeigt haben :-8