text: Apache Friends Support Forum • View topic - Unterschiedliches 'PHP DOCUMENT_ROOT' und 'web root' ?
  Unterschiedliches 'PHP DOCUMENT_ROOT' und 'web root' ?
  by hggbr » 28. January 2015 21:08
  ich versuche mit XAMPP lokal auf dem Rechner die Bedingungen meines Strato WebHosting-Pakets nachzubilden, um die komplette Homepage vorab offline vollständig zu testen.
  Zunächst die Situation wie es online (bei Strato) ist und wie ich es auch gerne offline (mit XAMPP) hätte:
  Online gibt es zwei Sub-Domains, die in Unterverzeichnisse umgeleitet werden:
  sub1.domain.de => Umleitung nach ./sub1/
  sub2.domain.de => Umleitung nach ./sub2/
  (bezüglich 'meines' Strato-Server-Verzeichnisses /home/strato/http/premium/rid/xxxxxxxxx/htdocs )
  Das funktioniert online so wie es soll (wird ja auch nur einfach durch Klicken bei Strato konfiguriert). Html-Seiten in den beiden Unterverzeichnissen greifen (zum Beispiel bei Bildern) bei Verwendung von "/bild.jpg" jeweils auf das eigene 'Sub-Domain-Unterverzeichnis zu, also Sub1-Domain auf '/home/strato/http/premium/rid/xxxxxxxxx/htdocs/sub1/' und Sub2-Domain auf '/home/strato/http/premium/rid/xxxxxxxxx/htdocs/sub2/' - ganz so wie man es erwartet.
  Ruft man unter den beiden Sub-Domains 'php_info()' auf, so wird jedoch für beide (!) dasselbe PHP-"DOCUMEMENT_ROOT"-Verzeichnis angezeigt, nämlich: /home/strato/http/premium/rid/xxxxxxxxx/htdocs
  Beide Sub-Domains teilen sich also dasselbe PHP-"DOCUMEMENT_ROOT"-Verzeichnis /home/strato/http/premium/rid/xxxxxxxxx/htdocs
  Ob das nun gut oder schlecht ist, weiß ich nicht, ich habe mich damit arrangiert und kann damit leben. Und genau so benötige ich es jetzt nun bei XAMPP/Apache.
  Situation bei XAMPP/Apache:
  Das mit den Sub Domains klappt soweit:
  httpd-vhosts.conf erweitern:
  DocumentRoot "G:/Dokument/homepage/homepage/web-content/sub1"
  ServerName sub1.localhost
  DocumentRoot "G:/Dokument/homepage/homepage/web-content/sub2"
  ServerName sub2.localhost
  Drivers/etc/Hosts anpassen, auch erledigt.
  Ruft man nun jedoch offline unter einer der Sub_Domains 'php_info()' auf, so wird als 'DOCUMENT_ROOT' abhängig von der Sub-Domain entweder
  "G:/Dokument/homepage/homepage/web-content/sub1/"
  "G:/Dokument/homepage/homepage/web-content/sub2"
  angegeben, und dieses Verhalten ist unterschiedlich zu Strato:
  PHP-Aufrufe der Form:
  require_once $_SERVER['DOCUMENT_ROOT'] . "/php/tools/clsHTMLFrame.php";
  schlagen dann offline natürlich fehl, während sie online wunderbar funktionieren.
  In httpd.conf ist DocumentRoot richtig gesetzt, aber das wird wohl durch die Umleitungen überschrieben!?!
  DocumentRoot "G:/Dokument/homepage/homepage/web-content"
  (XAMPP-Version ist 5.6.3)
  hggbr
  Joined: 28. January 2015 20:28
  Re: Unterschiedliches 'PHP DOCUMENT_ROOT' und 'web root' ?
  by Nobbie » 28. January 2015 22:08
  hggbr wrote: Ruft man nun jedoch offline unter einer der Sub_Domains 'php_info()' auf, so wird als 'DOCUMENT_ROOT' abhängig von der Sub-Domain entweder
  Dann solltest Du bei Strato fragen, warum das da entgegen der Konfiguration so läuft. Bei Dir ist alles richtig, genauso so hast Du die VirtualHosts programmiert und genauso verhalten sie sich. Der Fehler findet (wenn überhaupt) bei Strato statt.
  Aber - meine ganz persönliche Empfehlung:
  richte Dir einen Linux Rechner ein und dann benutze zu 100%(!) - nicht einmal nur 99% - exakt dieselben Pfade und Werte. Du hast ja schon das offensichtliche Problem, dass Du extrem abweichende Pfadnamen benutzt, so wird die die Umgebung also niemals auch nur annähernd identisch sein. Benutze GENAU dieselben Pfade und Variablen (dafür brauchst Du eben Linux, was aber auch eher ein Vorteil ist, denn das ist das bessere Server Environment) und dann ist es auch viel einfacher, eine exakte lokale Kopie anzulegen.
  by hggbr » 29. January 2015 21:38
  Aber jetzt mal unabhängig davon, wo der "Fehler" liegt: Kann man bei Xampp das Verhalten so ändern, dass für alle Subdomains dasselbe PHP-DOCUMENT_ROOT-Verzeichnis verwendet wird? Bzw.: Kann man die Subdomains ggf. anders anlegen, sodass sich dieses Verhalten ergibt?
  by Altrea » 30. January 2015 00:36
  Ich finde das Verhalten der Stratoserver hier ziemlich intransparent. Ein DOCUMENT_ROOT sollte immer auf das Wurzelverzeichnis der Domain zeigen, unabhängig davon ob es sich um einen virtuellen oder nicht virtuellen host handelt.
  Ich kann mir das Verhalten nur so erklären, dass Strato freiwillig oder unfreilillig PHP $_SERVER Variablen verbiegt. Hierzu habe ich folgenden Bug-Report gefunden, der Inkonsistenzen von DOCUMENT_ROOT beschreibt, wenn unter anderem dynamische VirtualDocumentRoot gesetzt werden: https://issues.apache.org/bugzilla/show ... i?id=26052
  Du könntest das Verhalten von Strato also simulieren, indem du deine $_SERVER['DOCUMENT_ROOT'] Variable verbiegst. Beispiele dazu findest du in den Kommentaren des Bug Reports. Spätestens wenn deine Projekte sich aber auf solch verbogene Einstellungen verlassen, wirst du auf Probleme stoßen sobald du zu einem Hoster wechselst, der saubere Server Variablen setzt.
  by Nobbie » 30. January 2015 13:00
  hggbr wrote: Aber jetzt mal unabhängig davon, wo der "Fehler" liegt: Kann man bei Xampp das Verhalten so ändern, dass für alle Subdomains dasselbe PHP-DOCUMENT_ROOT-Verzeichnis verwendet wird?
  Das ist der einfachste Fall überhaupt (ich glaube, "Altrea" sieht hier ausnahmsweise den Wald vor lauter Bäumen nicht): einfach gar keine VirtualHosts konfigurieren, dann verhalten sich alle Domains gleich. Und dann einfach den einen DocumentRoot, den es dann gibt, so setzen wie gewünscht. Dann ist aber auch "localhost" usw. alles das gleiche.
  by Altrea » 30. January 2015 16:43
  Nobbie wrote: (ich glaube, "Altrea" sieht hier ausnahmsweise den Wald vor lauter Bäumen nicht)
  Das mag ich nicht in Abrede stellen
  by hggbr » 02. February 2015 19:45
  Nobbie wrote: Das ist der einfachste Fall überhaupt (ich glaube, "Altrea" sieht hier ausnahmsweise den Wald vor lauter Bäumen nicht): einfach gar keine VirtualHosts konfigurieren, dann verhalten sich alle Domains gleich. Und dann einfach den einen DocumentRoot, den es dann gibt, so setzen wie gewünscht. Dann ist aber auch "localhost" usw. alles das gleiche.
  was bedeutet denn das genau: Kann man Subdomains ohne VirtualHosts einrichten, so wie im Zitat beschrieben? Wie geht das denn?
  P.S.: Strato hat sich zur Thematik übrigens geäußert:
  Strato wrote: Generell ist es richtig, dass wenn eine Domain/Subdomain auf einen Unterordner umgeleitet ist, dieser im DOCUMENT_ROOT zu finden sein sollte. Auf einer Hosting-Plattform, die auf Hochverfügbarkeit für viele tausend Kunden ausgelegt ist, ist dies jedoch bedauerlicherweise nicht möglich. Die Virtualisierung der Plattform funkt hier dazwischen, sodass eine genauere Anzeige nicht umgesetzt werden kann.
  by Nobbie » 03. February 2015 12:58
  hggbr wrote:
  Nobbie wrote: was bedeutet denn das genau: Kann man Subdomains ohne VirtualHosts einrichten, so wie im Zitat beschrieben? Wie geht das denn?
  Ja natürlich. Eine Subdomain und ein VirtualHost ist NICHT das gleiche. Eine Subdomain ist zunächst nur ein weiterer Name für die gleiche IP im Internet. Mehr nicht, hat mit Apache noch gar nichts zu tun.
  Und VirtualHost kann man (besteht aber kein Zwang) benutzen, wenn sich Subdomains (unter Apache) verschieden verhalten sollen. Wenn alle Subdomains sich gleich verhalten sollen, also einfach nur andere Namen für exakt die gleiche Umgebung sind, dann muss man genau GAR NICHTS in Apache einstellen, das ist der Auslieferungszustand.
  Wenn man beispielsweise FTP Server einrichtet, kann man auch Subdomains benutzen, aber das hat mit VirtualHosts nichts mehr zu tun, VirtualHost ist ein rein spezifischer Apache Begriff.
  P.S.: Die Antwort von Strato klingt sehr seltsam, ich glaube eigentlich nicht, dass das wirklich so realisiert ist. Ich habe selbst bei 1blu auch eine Web-Umgebung (sicherlich auch geteilt mit tausenden anderen Klienten) und da kann ich sehr wohl für verschiedene Subdomains verschiedene Verzeichnisse als DocumentRoot einrichten (das heißt da nicht "DocumentRoot", das ist ja wieder ein Apache Begriff, sondern "Startverzeichnis" oder "Wurzelverzeichnis"). In jedem Fall kann man da sehr wohl verschiedene Ordner für verschiedene Subdomains angeben. Ich kenne die Admin Umgebung von Strato Webpaketen nicht (ist vielleicht auch eine Frage, welches Paket man hat), aber ich kann mir nicht vorstellen, dass das dort grundsätzlich nicht möglich ist. Es ist nur per Default eben nicht so eingerichtet, das muss man schon selbst explizit angeben, jede Subdomain, die da nicht explizit angegeben wird, bekommt den Standard DocumentRoot von diesem Webpaket zugewiesen.
  Es ist nur eben so, dass Subdomains nicht "aus der Luft" daherkommen. Um eine Subdomain überhaupt adressieren zu können, muss in irgendeinem sog. DNS Server (da werden die Domain Namen mit IPs verknüpft) eine entsprechenden Eintrag machen und diese Arbeit muss Strato ggf. noch leisten, bevor man eine bestimmte Subdomain überhaupt ansprechen kann. Manche Provider richten aber Domains von vorneherein so ein, dass sie quasi "Wildcard" Subdomains miteinrichten, d.h. es funktioniert mit allen Subdomain Namen, die einem so einfallen, dass die Subdomain mit der richtigen IP verbunden ist. Aber das ist eben nur eine IP - das hat mit Apache noch nichts zu tun.