Subdomain einen Teil auslesen (reguläre Ausdrücke)

dwex

Erfahrenes Mitglied
Hallo Leute,

ich stehe wieder mal vor einem Problem wo ich nicht weiterkomme.

Ich muss eine Art Subdomainscript schreiben.

Ich habe hier eine Datenbank in der steht in einer Spalte eine Subdomain nach dem Muster "http://www.name.domain.de".
Ausserdem habe ich die Domain auf Wildcard gesetzt und die Wildcard schaut in ein Verzeichnis auf meinem Server.

So jetzt kann ich ja mal die jeweils eingegebene Adresse über die Variable $_SERVER['HTTP_HOST'] auslesen - das ist ja noch nicht schwer.
Ich muss jetzt zu der eingegebenen Subdomain Daten aus der MySQL-DB lesen - das könnte ich ja noch mit LIKE machen da ich dann ja auch eingeschlossen hätte, das wenn ein Besucher z.B. nur name.domain.de (also ohne http://www.) eingibt.

Aber was passiert wenn der Besucher z.B. ggg.name.domain.de eingibt - dann wird die Domain nicht gefunden obwohl es eigentlich name.domain.de gewesen ist.

Wie könnte ich das anfangen, dass ich name.domain.de aus der anfrage rausbekomme.
Vorallem in anbetracht dessen, dass ich ja ggg.name.domain.de oder aber auch http://www.ggg.name.domain.de oder bbb.ddd.ddfff.name.domain.de eingeben könnte.

Ich hoffe, dass Ihr nun nicht zu verwirrt seid um mir zu helfen.

Vielen Dank im Voraus!
 
Probier mal Folgendes:
PHP:
$query = '
	SELECT
	        …
	  FROM
	        …
	  WHERE
	        `foobar` LIKE "%'.preg_replace('/.*([^.]+\.[^.]+\.[^.]+)$/', '\1', $_SERVER['HTTP_HOST']).'"
	';
 
Hi Gumbo,

das funktioniert leider nicht - wenn ich nach deiner Methode suche dann sucht er mir so wie in folgendem Beispiel.

Ich gebe als Domain mmm.huhu.name.domain.de ein
Die Ausgabe deiner Funktion ist dann e.domain.de

Ich bin am verzweifeln.

Ich hab jetzt mal noch selbst ein bischen rumprobiert und folgendes zum Testen geschrieben.
PHP:
$tok = strtok ($HTTP_HOST,".");
        while ($tok) {
                $dom = $tld;
                $tld = $tok;
                $tok = strtok (".");
        }

$domain = strtolower("$dom.$tld");
echo "<br><br>Domain = $domain";
$subdomain = $HTTP_HOST;
echo "<br>Subdomain ist $subdomain";
$subdomain = eregi_replace("\.".$domain, "", $subdomain);
echo "<br>Erste Änderung ist $subdomain";
$subdomain = eregi_replace("www\.", "", $subdomain);
echo "<br>Zweite Änderung ist $subdomain";
$subdomain = strtolower($subdomain);
echo "<br>Dritte Änderung ist $subdomain";

Jetzt bekomme ich bei der dritten Änderung bei der domain qqq.name.domain.de zumindest mal qqq.name ausgegeben - aber das hilft mir ja nicht weiter da das qqq ja nicht in der DB steht.

HiLfE!!
 
Dann setze den Quator einfach „ungierig“ ein:
Code:
/.*?([^.]+\.[^.]+\.[^.]+)$/
 
Hallo Gumbo - mein Held,

tja die REGEX und ich haben schon von jeher keinen Friedensvertrag.
Wir stehen gewaltig auf dem Kriegsfuß :suspekt:

Vielen Dank für deine Hilfe

PS: Wenn du eine gute Lernseite für REGEXE kennst oder mir ein Buch empfehlen kannst würde ich mich freuen wenn du entsprechende Quellen hier noch posten könntest.
 
Zuletzt bearbeitet:
Da bin ich nochmal!

Mir ist mit meinen begrenzten Methoden so ganz ohne REGEX noch eine Lösung eingefallen.

Und zwar mit explode() und array_reverse()

Hier ein Beispiel:
PHP:
$domain = $_SERVER['HTTP_HOST'];
echo "Aufgerufene Domain: $domain";
$teile = explode(".", $domain);
$teile = array_reverse($teile);

$suchdomain = $teile[2].".".$teile[1].".".$teile[0];

echo "<br>Die reine Subdomain lautet: $suchdomain";

ABER ich werde die Variante von Gumbo nehmen!
 
Zuletzt bearbeitet:
Hallo,

ich bin mal so frei: auf http://www.regular-expression.info/ gibt es ein recht gutes Tutorial samt Referenz.

[edit]
Eine ähnliche Lösung hatte ich auch im Sinn:
PHP:
$parts = explode('.', $_SERVER['HTTP_HOST']);
$subdomain_parts = array_slice($parts, -3, 3);
$subdomain = implode('.', $subdomain_parts);
Bei Bedarf könnte man das sogar in eine Zeile packen ;)
[/edit]

Grüße,
Matthias
 
So jetzt ist tatsächlich eine Folgefrage aufgetaucht.
Gehört zwar eigentlich ins MySQL-Forum - aber vollständigkeithalber poste ich es hier in diesem Thread.

Wenn ich nun mein tolles Ergebnis der Subdomain mit LIKE als Suche an die Datenbank übergebe dann findet der mir mitunter mehrere Ergebenisse - das soll ja nicht sein bei einem Subdomainscript.

Z.B. Ich habe die Domain http://www.meier.domain.de sowie http://www.kmeier.domain.de in meiner Liste dann findet der mir mit LIKE ja beide.
Mir ist jetzt klar, dass ich jetzt einfach nach genau der Zeichenkette suchen muss und nicht mit LIKE aber wenn ich jetzt die Subdomain so schön zerlegt habe möchte ich aus Gründen der Komatibilität nicht wieder http://www. vor meine Subdomain hängen - wenn Ihr versteht was ich meine - zumal es ja sein kann das der User welcher die Subdomains anlegt diese ja auch mal ohne www. eintragen könnte (ja ich weis das müsste man abfangen). Aber mich interessiert es einfach ob es auch anders geht.
 

Neue Beiträge

Zurück