PHP Domain auslesen: So holst du die Domain in PHP sauber und zuverlässig
Du willst in PHP die Domain auslesen, ohne dich mit unnötigem Ballast herumzuschlagen? Dann zeige ich dir jetzt die einfachsten Wege, typische Stolperfallen und wann welcher Ansatz wirklich Sinn macht.
PHP Domain auslesen: So hole ich die Domain sauber aus der URL
Wenn ich in PHP die Domain auslesen will, mache ich es nicht komplizierter als nötig. Das Ziel ist immer dasselbe: Ich will schnell und zuverlässig wissen, unter welcher Domain meine Seite läuft. Klingt simpel. Ist es auch. Wenn man die richtigen Funktionen kennt.
In diesem Artikel zeige ich dir, wie ich eine Domain in PHP auslese, wie du zwischen Host, Subdomain und kompletter URL unterscheidest und welche Fehler ich dabei immer wieder sehe. Kein Bla Bla. Nur das, was du wirklich brauchst.
PHP Domain auslesen: Der schnellste Weg
Der häufigste Fall ist einfach: Ich will die aktuelle Domain der aufgerufenen Seite auslesen. Dafür nutze ich meist $_SERVER['HTTP_HOST'] oder $_SERVER['SERVER_NAME'].
$domain = $_SERVER['HTTP_HOST'];Das ist in vielen Fällen genau richtig. Wenn ein User https://www.example.com/page aufruft, bekomme ich oft www.example.com zurück.
Wenn ich die Domain ohne Port brauche, ist HTTP_HOST meistens die bessere Wahl, weil es näher an der echten Anfrage ist. Wenn ich dagegen serverseitig arbeite und die konfigurierte Host-Info brauche, schaue ich mir auch SERVER_NAME an.
PHP Domain auslesen: Unterschied zwischen HTTP_HOST und SERVER_NAME
Hier machen viele den ersten Fehler. Diese beiden Werte sehen ähnlich aus, sind aber nicht immer gleich.
- $_SERVER['HTTP_HOST']: Kommt aus dem Request des Browsers.
- $_SERVER['SERVER_NAME']: Kommt aus der Serverkonfiguration.
Ich nutze HTTP_HOST, wenn ich die tatsächlich aufgerufene Domain brauche. Ich nutze SERVER_NAME, wenn ich mich auf die Serverkonfiguration verlassen will. In der Praxis ist HTTP_HOST oft flexibler.
Wichtig: Beide Werte können manipuliert werden, wenn du sie blind vertraust. Deshalb gilt: niemals ungeprüft für Sicherheit verwenden.
PHP Domain auslesen und die TLD sauber extrahieren
Manchmal will ich nicht nur die komplette Domain, sondern nur die Hauptdomain. Zum Beispiel aus blog.example.com nur example.com.
Das klingt leicht. Ist es aber nicht immer. Besonders bei Domains wie example.co.uk wird es schnell tricky. Ich würde hier nicht mit billigen String-Tricks arbeiten, wenn es wirklich sauber sein soll.
Für einfache Fälle kann ich die Domain so zerlegen:
$host = $_SERVER['HTTP_HOST'];
$parts = explode('.', $host);
$domain = implode('.', array_slice($parts, -2));Das funktioniert bei vielen Standard-Domains. Aber es ist nicht universell korrekt.
Warum? Weil öffentliche Suffixe wie .co.uk Sonderregeln haben. Wenn du das robust lösen willst, brauchst du eine verlässliche Liste der Public Suffixes. Eine gute Referenz dafür ist die Public Suffix List.
PHP Domain auslesen: Komplett URL oder nur Host?
Ich trenne hier immer sauber zwischen drei Dingen:
- Domain = example.com
- Host = www.example.com
- URL = https://www.example.com/page?x=1
Wenn ich die komplette URL brauche, baue ich sie meist aus mehreren Teilen zusammen:
$scheme = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http';
$host = $_SERVER['HTTP_HOST'];
$requestUri = $_SERVER['REQUEST_URI'];
$url = $scheme . '://' . $host . $requestUri;Wenn du tiefer einsteigen willst, hilft dir die offizielle PHP-Doku zu $_SERVER und parse_url().
PHP Domain auslesen mit parse_url()
Wenn ich schon eine komplette URL habe, ist parse_url() oft die sauberste Lösung. Damit hole ich mir gezielt den Host heraus.
$url = 'https://www.example.com/shop?ref=abc';
$host = parse_url($url, PHP_URL_HOST);Das ist stark, wenn ich mit gespeicherten URLs arbeite oder aus externen Quellen komme. Dann muss ich nicht selbst Strings zerlegen.
Mein Punkt: Wenn du eine vollständige URL hast, nimm parse_url(). Wenn du die aktuelle Anfrage ausliest, nimm $_SERVER['HTTP_HOST'].
PHP Domain auslesen: Subdomain entfernen
Oft will ich die Subdomain loswerden. Zum Beispiel aus shop.example.com nur example.com. Für einfache Setups kann ich das über die letzten zwei Segmente lösen.
$host = $_SERVER['HTTP_HOST'];
$parts = explode('.', $host);
$baseDomain = implode('.', array_slice($parts, -2));Das reicht für viele Projekte. Aber sobald du internationale Domains, Sonderfälle oder komplexe DNS-Strukturen hast, wird diese Methode schnell zu grob.
- Ich prüfe zuerst, ob die Domain überhaupt eine Subdomain hat.
- Ich vermeide harte Annahmen bei
.de,.comoder.org. - Ich teste Sonderfälle wie
blog.example.co.uk.
Wenn du es professionell machen willst, musst du deine Logik gegen echte Domain-Fälle testen. Sonst baust du dir einen Fehler ein, der erst live auffällt.
PHP Domain auslesen: Sicherheit nicht vergessen
Hier wird es wichtig. HTTP_HOST kann durch den Request beeinflusst werden. Deshalb darfst du daraus niemals direkt vertrauenswürdige Logik ableiten, wenn es um Security geht.
Ich mache das so:
- Ich lese die Domain aus.
- Ich validiere den Wert.
- Ich arbeite mit Whitelist-Regeln, wenn es sicherheitskritisch ist.
Beispiel für eine einfache Prüfung:
$host = $_SERVER['HTTP_HOST'];
if (!preg_match('/^[a-z0-9.-]+$/i', $host)) {
die('Ungültiger Host');
}Das ist kein perfektes Security-Konzept, aber ein guter Start. Wenn du hostbasierte Entscheidungen triffst, solltest du den Wert immer kontrollieren.
PHP Domain auslesen: Typische Fehler
Ich sehe immer wieder dieselben Probleme. Hier sind die wichtigsten:
- Port vergessen:
HTTP_HOSTkannexample.com:8080enthalten. - Subdomain falsch abgeschnitten: Nicht jede Domain hat exakt zwei Segmente.
- HTTP_HOST blind vertraut: Kann manipuliert werden.
- URL und Domain verwechselt: Das ist nicht dasselbe.
- Lokale Umgebungen ignoriert:
localhostverhält sich anders als echte Domains.
Wenn du das vermeidest, bist du schon weiter als viele andere Entwickler.
PHP Domain auslesen: Meine pragmatische Empfehlung
Wenn ich es einfach und solide brauche, nehme ich diese Reihenfolge:
- Wenn ich eine komplette URL habe, nutze ich
parse_url(). - Wenn ich die aktuelle Anfrage brauche, nutze ich
$_SERVER['HTTP_HOST']. - Wenn ich eine Hauptdomain extrahieren will, prüfe ich Sonderfälle separat.
- Wenn Sicherheit wichtig ist, validiere ich den Host gegen eine Whitelist.
So halte ich die Lösung simpel, schnell und wartbar. Genau das willst du in echtem Code.
Am Ende zählt nicht, dass der Code elegant aussieht. Es zählt, dass er in der Praxis funktioniert. Wenn du php domain auslesen willst, nimm die Methode, die zu deinem Use Case passt, und vermeide Annahmen, die später teuer werden.
php domain auslesen ist am Ende kein Hexenwerk, wenn du Host, URL und Subdomain klar trennst und die Daten nicht blind vertraust.
Weitere Beiträge
Debug Bedeutung: Was Sie wissen sollten
vor 1 Jahr