httpd.conf: Relative Pfadangaben für DocumentRoot etc

Alles, was den Apache betrifft, kann hier besprochen werden.

httpd.conf: Relative Pfadangaben für DocumentRoot etc

Postby Thovan » 23. March 2004 08:12

Hallo,

bei mir läuft Linux und Windows parallel und Apache/httpd benutzen die selben DocumentRoots...

jetzt wollte ich Ihnen auch (was Pfadangaben betrifft) dieselbe Konfigurationsdatei verpassen und habe es auch schon geschafft die betreffenden Einträge in eine eigene *.conf-Datei auszulagern, die ich mit Include wieder einbinde.

Jedoch bekomme ich es nicht hin, für DocumentRoot und Pfadangaben zu LogFiles relative Pfadangaben zu verwenden!

Wie lässt sich das machen?

Gibt es in der httpd.conf so etwas wie Variablen, die man dafür verwenden könnte?
Thovan
 
Posts: 68
Joined: 15. May 2003 09:26
Location: Leipzig

Postby Stefan » 23. March 2004 10:48

Morsche,

bei mir sieht das so aus (win) DocRoots liegen auf "e:\var\www\user\[...]"
meine Pfadangaben in der httpd.conf, die in "e:\xampp\[...]\httpd.conf" liegt
sehen "Linuxlike" aus (z.B DocumentRoot "/var/www/user1/htdocs").
Also benutzte ich garkein Laufwerksbuchstaben vor meinen Pfaden. Unter Linux ist diese Partition ebenfalls gemountet und genau so ansprechbar.
Ergo habe ich gleiche Pfadbedingungen egal mit welchen OS ich darauf zugreifen will.
So funktioniert dies wenigstens bei mir und ich würde es Dir auch empfehlen.
verwende dann halt den absoluten Pfad und nicht den relativen.

Irgendwie unklar? könnte sein, wenn ich mir das so anschaue :-)

Gruß
Stefan
User avatar
Stefan
 
Posts: 475
Joined: 26. December 2002 22:36
Location: Mitten in der sonnigen Südpfalz

Postby Thovan » 23. March 2004 17:16

Danke...

Es ist schonmal ein Anfang und klingt auch recht gut.

Die Frage die sich nur für mich ergibt:

Wie mounte ich das Xlike unter Windows?

EDIT:

Ach quatsch ... jetzt sehe ich erstmal wie das bei Dir ist...

aber mein Problem ist, dass Apache auf C:\ liegt (und dort auch bleiben soll),
mein gesamtes /www (unter Linux) aber auf Laufwerk G:\
Thovan
 
Posts: 68
Joined: 15. May 2003 09:26
Location: Leipzig

Postby Wiedmann » 23. March 2004 17:25

mal eine andere Lösung...:
schreib doch dieese Directiven zweimal. Einmal für Windows und einmal für Linux.

und mittels
<IfModule mpm_winnt_module> ... </IfModule> --> läuft unter Windows
<IfModule !mpm_winnt_module> ... </IfModule> --> läuft nicht unter Windows

Im Prinzip bräuchte man das aber nur für den ServerRoot. Bei allen anderen Direktiven, wenn man den führenden '/' wegläßt, gehen dann relativ von ServerRoot aus.
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Thovan » 24. March 2004 10:24

Wiedmann wrote:mal eine andere Lösung...:
... Bei allen anderen Direktiven, wenn man den führenden '/' wegläßt, gehen dann relativ von ServerRoot aus.


Eben leider nicht, denn dann müsste ich ja nur in der Original httpd.conf des jeweiligen Systems den ServerRoot nach laden aller Module etc. auf die jeweilige Partition ändern.

Aber scheinbar muss der DocumentRoot absolut sein.

Ich konnte bisher in keiner Literatur, die ich bisher gefunden habe eine relative Angabe finden und wenn ich es wie beschrieben mache, meckert Apache beim überprüfen der Konfiguration rum, dass es die Pfade die ich für meine Virtuellen Hosts angegeben habe nicht gibt und das NameVirtualHost * keine Virtuellen Hosts hätte.
Thovan
 
Posts: 68
Joined: 15. May 2003 09:26
Location: Leipzig

Postby Stefan » 25. March 2004 09:51

Morsche,

ehrlich gesagt hab ich glaub ich den Faden verloren...

Also die relativen Pfade gehen wie Wiedmann beschrieben hat immer von der Serverroot aus. Unter Windows ist das natürlich unbrauchbar, wenn die Serverroot auf einer anderen Patition liegt wie die einzubindenden Dateien. Klar, da geht kein relativer Pfad. Ansonsten ist doch Wiedmanns Vorschlag eine super Idee.
Die Fehlermeldung
NameVirtualHost * keine Virtuellen Hosts

sieht eher nach einem Fehler in den vhost Direktiven aus. Poste die dochmal.
bzw. funktioniert Deine vhost Konfiguration überhaupt bzw. macht dies nur in einem OS Mucken?

Gruß
Stefan
User avatar
Stefan
 
Posts: 475
Joined: 26. December 2002 22:36
Location: Mitten in der sonnigen Südpfalz

Postby Wiedmann » 25. March 2004 12:36

Stimmt ja Steffan. Wenn er den Apache auf C\campp\apache: hat, kommt er nicht mit einem relativen Pfad auf "G:\"

@Thovan:
Hast du auf G: nur deine www-Sachen?
Wo hast du denn die G-Patte im Linux reingehängt?

Jetzt kenn ich deine Windowsversion nicht.... aber man könnte auch folgendes machen:
Vergib für diese Platte keinen Laufwerksbuchstaben, sondern häng diese unter Windows nur als Unterverzeichnis in den Verzeichnisbaum von C rein.

Halt an der Stelle, daß sich der selbe Pfad wie unter Linux ergibt.... Am besten bei beiden Betriebssystemen unterhalb vom Apache.
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Thovan » 25. March 2004 13:29

Folgendes:
Durch Probieren habe ich rausgefunden, dass man die ServerRoot-Direktive mehrmals nutzen kann.

Also habe ich aus meiner httpd.conf die Allgemeinen Server-Einstellungen wie etwa laden von Modulen etc. ausgelagert in eine WinMain.conf bzw. XMain.conf[i/], eine [i]Error.conf und eine VirtualHosts.conf angelegt (Inhalte dürften klar sein).

Diese *.conf-Dateien liegen auch auf /www bzw. G:/ (Verzeichnis Conf)

Meine httpd.conf liegt im Standardordner also unter Windows XP
C:/Programme/Apache2/conf unter unter Red Hat 9 in /etc/http.

In der httpd.conf steht nur die ServerRoot-Direktive die auf's jeweilige Programmverzeichnis (siehe oben) verweist dann wird die entsprechende *Main.conf mittels Include eingebunden und dann wollte ich mittels 2. ServerRoot-Direktive diesen auf G:/ bzw /www umändern und die restlichen *.confs einbinden.

Geht nur leider wg oben beschriebenem Fehler nicht.

Auf /www befinden sich nur die VirtuellenHosts (DocumentRoot, cgi-bin, logs, error) und ich will auch die MySQL-Datenbank dorthin auslagern.


Meine Virtuellen Hosts sehen derzeit etwa so aus:
Code: Select all
NameVirtualHost *


<VirtualHost *>
    ServerAdmin root@mobile
    DocumentRoot "mobile/DocumentRoot"
    ServerName mobile
    ErrorLog mobile/Logs/error.log
    CustomLog mobile/Logs/access.log common
</VirtualHost>

<VirtualHost *>
    ServerAdmin root@localhost
    DocumentRoot localhost/DocumentRoot
    ServerName localhost
    ErrorLog localhost/Logs/error.log
    CustomLog localhost/Logs/access.log common
</VirtualHost>

<VirtualHost *>
    ServerAdmin root@server
    DocumentRoot server/DocumentRoot
    ServerName server
    ErrorLog server/Logs/error.log
    CustomLog server/Logs/access.log common
</VirtualHost>

<VirtualHost *>
    DocumentRoot tutorials
    <Directory "tutorials">
     Options All Indexes
    </Directory>
    ServerName tutorials
</VirtualHost>


Ich habe noch eine Möglichkeit gefunden mit der es gehen könnte: mittels VirtualDocumentRoot, etc.

Aber es wäre mir lieber,. wenn ich es wie beschrieben lauffähig bekommen würde.
Thovan
 
Posts: 68
Joined: 15. May 2003 09:26
Location: Leipzig

Postby Wiedmann » 25. March 2004 14:16

Lass doch erst mal die vhosts weg bis der Rest tut....
Warum den Serverroot ändern? du kannst doch auch den Pfad zu den conf usw. absolut angeben.

Nochmal zu meinem Vorschlag gerade. Du hast die G-Partition unter Debian als /www reingehängt. Sprich. alles was da drin ist kannst du über /www/... ansprechen. Mach das doch unter Windows genauso.

Mauch aus der Partition keinen Laufwerkbuchstaben G sondern häng die Partition mit Hilfe der Datenträgerverwaltung als /www in das Rootverzeichnis von C rein.

Wenn du den Apache vom Laufwerk C aus startest, werden bei aboluten Pfaden wie "/www/..." automatisch das Laufwerk C vorangestellt und es wird auf /C:/www/.../ zugegriffen. Unter dem absoluten Pfad "/www/... ist ja jetzt also bei beiden Betriebssystemen das selbe zu finden.

Jetzt passt es auch bei den DocRoots von den VHosts bei beiden BS:

vhost1 : DocumentsRoot = /www/vhost1/
vhost1 : CustomLog = /www/vhost1/logs/access.log

vhost2 : DocumentsRoot = /www/vhost2/
vhost1 : CustomLog = /www/vhost2/logs/access.log

usw.
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Thovan » 26. March 2004 07:28

Wiedmann wrote:Lass doch erst mal die vhosts weg bis der Rest tut....
Warum den Serverroot ändern? du kannst doch auch den Pfad zu den conf usw. absolut angeben.


Das schon, allerdings wäre es ja nicht nur der Pfad, es werden ja auch Module geladen, deshalb wäre es auf die von mir beschriebene Art komfortabler (wenn es nur funktionieren würde)!

Wiedmann wrote:Nochmal zu meinem Vorschlag gerade. Du hast die G-Partition unter Debian als /www reingehängt. Sprich. alles was da drin ist kannst du über /www/... ansprechen. Mach das doch unter Windows genauso.

Mauch aus der Partition keinen Laufwerkbuchstaben G sondern häng die Partition mit Hilfe der Datenträgerverwaltung als /www in das Rootverzeichnis von C rein.

...


Dein Vorschlag klingt zwar, als ob er funtkionieren würde, aber ich bin nicht so ganz begeistert davon mir G:/ abzuschaffen.
(Es liegen ja noch meine Datenbanken drauf und per FTP muss ich ja von aussen ggf. auch mal drauf zugreifen.

Das liesse sich zwar alles Umsetzen, würde aber bei mir einiges durcheinanderbringen
bzgl. BackUps etc.

Mir wäre es schon lieb, wenn ich meine Ordner-und-Partitions-Struktur beim status quo belassen könnte.

Ich versteh einfach nicht, warum Apache bei relativen Pfadangaben in der DocumentRoot-Direktive bei mir nicht den Server-Root voranstellt.
Thovan
 
Posts: 68
Joined: 15. May 2003 09:26
Location: Leipzig

Postby Thovan » 29. March 2004 10:28

Also ich habe das jetzt probiert indem ich G:/ auf c:/www/ umgebogen habe,
aber Apache beharrte weiterhin darauf, dass es die Verzeichnisse nicht gab.
Scheinbar will er beim DocumentRoot doch eine absolute Pfadangabe!!
Thovan
 
Posts: 68
Joined: 15. May 2003 09:26
Location: Leipzig

Postby Wiedmann » 29. March 2004 11:20

Hm.
Dann muss noch was anderes sein. Dein Serverroot ist auch auf "C:/..."?

Bei mir tut das einwandfrei.
Bei einem ServerRoot von:
"C:/DFUE/Apache2/

Kann ich folgende DocumentRoot nehmen:
"C:/DFUE/Apache2/vhost/foo/"
(absolute Anganbe mit LW)
"/DFUE/Apache2/vhost/foo/"
(absolute Angabe ohne LW, LW wird mit dem Startlaufwerk vom Apache ergänzt)
"vhost/foo/"
(relative Angabe, relativ zu ServerRoot)
Die Seite läuft in allen drei Fällen wie erwartet.
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany


Return to Apache

Who is online

Users browsing this forum: No registered users and 16 guests