Moin!
Zur Erklärung: Dein lokaler Apache rennt durch die aktuelle Weltgeschichte. Dein Browser will gerne "www.neinedomain.tld" haben und fragt als ersten deinen lokalen Apache. Der schaut zuerst in deine lokale hosts-Datei und sagt brav: "bitteschön, habe ich" und schickt deinem Browser die lokal gespeicherten Seiten. Weitere Abfragen im Internet hält er nicht für nötig.
CHRISTOPH! Kann doch nicht wahrsein! Oder bist du wieder ein Fake, der die Sachkenntnis des echten Christoph in Zweifel ziehen will?
Die Abfolge ist jedenfalls falsch geschildert.
Der Browser soll Kontakt zu www.example.com aufnehmen. Dazu fragt er beim Betriebssystem nach dessen IP-Adresse. Das Betriebssystem hat (bei manchen Systemen konfigurierbar) sowohl die Domainlistendatei "hosts", als auch die Nameserver im Internet als Informationsquelle.
Standardverhalten: Zuerst in die Datei "hosts" gucken. Wenn dort die gewünschte Domain mit IP aufgeführt ist, diese zurückmelden. Ansonsten: Nameserver befragen.
Da die IP in hosts enthalten ist, wird die IP der lokalen Installation zurückgegeben, und der Browser verbindet sich jetzt auf Port 80 dieser IP, um eine Webseite zu kriegen.
Und erst dann wird der lokale Apache aktiv und liefert die entsprechende Seite der angeforderten Domain aus. Er schaut aber ausdrücklich _NICHT_, ob im Internet irgendwelche Server auf den gleichen Namen hören würden. Das ist (außer man konfiguriert sich einen Proxy) absolut nicht seine Aufgabe.
Genau diese - übrigens wirklich völlig korrekte - Verhaltensweise zeigt Apache erst ab Version 2.0.45 (unter Windows). Dein Browser ist mit dem Ergebnis auch zufrieden, er hat ja auf seine Server-Anfrage hin eine befriedigende Antwort erhalten und sieht keinen Grund, etwa noch andere Server im Internet zu fragen, ob sie ihm vielleicht unter dieser Adresse was schicken könnten.
Wie gesagt: Der Grund für die Anfrage am lokalen Webserver liegt begründet in dem Ergebnis der Namensauflösung - nicht jedoch an der Webserverinstallation.
Der Grund: "www.meinedomain.tld" gibt es in identischer Form und Schreibweise sowohl im Internet bei deinem Provider wie auch lokal als virtuellen host und in deiner hosts-Datei lokal (mit einer "privaten" IP). Dein Browser fragt nun _zuerst_ den lokalen Apache, und der fragt _zuerst_ deine hosts-Datei, danach halten Browser und Server die Angelegenheit für erledigt, weil es ja ein anzeigbares Ergebnis gegeben hat.
Der Server ist unbeteiligt.
Abhilfe: der Eintrag "servername.tld" in deiner hosts-Datei darf nicht identisch sein mit einer im Internet vorhandenen Adresse "servername.tld".
Wenigstens das stimmt.
Zur Info: Es gibt die extra für Testzwecke definierte Top-Level-Domain "test", die im Internet garantiert nicht benutzt wird.
Also kann man für den lokalen Testserver "www.domain.test" benutzen, und für den Liveserver dann "www.domain.com/de/org/net/wasauchimmer".
Der Nachteil: Selbstverständlich ist es bei dieser Lösung unmöglich, hartcodierte Domainnamen in die Skripte zu packen, so dass dadurch sowohl auf dem Test- als auch Liveserver das Skript auf die identische Domain reagiert.
Andererseits: Wenn sich die Domain des Liveservers irgendwann mal ändert, hätte man ja auch das Problem, dass man in den Skripten die Domains ändern müßte.
Deshalb: Die Domain des aktuell benutzten virtuellen Hosts steht in $_SERVER['HTTP_HOST'] drin und darf auch verwendet werden. :)
Oder habe ich dein Problem komplett mißverstanden? Hast du das Problem denn auch noch, wenn du deinen lokalen Apache mal komplett ausschaltest?
Das Abschalten wird nichts bringen, weil der Browser dann immer noch die falsche IP-Adresse nach Webseiten befragen wird. Der Apache hat mit der DNS-Namensauflösung nicht das geringste zu tun - auch in der Windows-Version nicht. Mag sein, dass du das irgendwie mit dem IIS verwechselst, der ja nicht nur Webserver sein kann (aber ob der DNS kann, würde ich einfach mal bezweifeln).
- Sven Rautenberg