• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Apache2 Root; Linux

Hesoyam

Neues Mitglied
Hallo,

ich arbeite seit ein paar Tagen an meinem Webserver, den ich mir vor kurzem zugelegt habe.
Es ist ein normaler PC mit Linux Ubuntu OS.
Apache 2 + PHP5 + mySQL

Soweit so gut.
Nun habe ich meine Webseite die ich zuerst auf Windows mit WAMP gehostet hatte 1:1 auf den Linux-PC gezogen.

Auf Windows war mein Quelltext etwa so:
PHP:
<?php
  # [...]
    
    ######################
    ##    INCLUDES        ##
    ######################
    require_once('/_inc/mysql.inc.php');
    require_once('/_inc/bbcode.inc.php');
    
  # [...]
?>
Wenn ich das so in Linux übertage (Root ist in /var/www/) dann zeigt er mir nur eine blanke weisse Seite an.

Wenn ich das ganze ändere in
PHP:
<?php
  # [...]
    
    ######################
    ##    INCLUDES        ##
    ######################
    require_once('_inc/mysql.inc.php');
    require_once('_inc/bbcode.inc.php');
    
  # [...]
?>
zeigt er was an.
Aber meine Seite ist so aufgebaut dass ich das ganze vom ROOT aus aufrufen muss, also mit führendem /, weil alles über eine index.php mit mod_rewrite läuft.
zbsp.:
http://example.org/home führt auf http://example.org/index.php?site=home
http://example.org/gbook/posts/1 führt auf http://example.org/index.php?site=gbook&modul=posts&spec=1

Demnach müsste ich meine Seite(n) komplett überarbeiten, worauf ich ehrlich gesagt keine Lust hätte, denn das ist schließlich nicht mein einziges Projekt und ich habe an die 4-5 Projekte die auf Root-Includes basieren.

Meine Frage jetzt:
Wie kann ich das umstellen, dass ich nicht bei jedem Include $_SERVER['DOCUMENT_ROOT'] bzw. /var/www/ davorschreiben muss.
Evtl. irgendwo in einer php-config.ini-datei oder so?

Danke im Vorraus

Daniel
 
Werbung:
Das ist der Nachteil wenn du mit relativen Pfaden arbeitest und dann aber dann kein Wurzelverzeichniss definierst. Üblich ist die Methode mit dem DOCUMENT_ROOT oder einer Variabeln, die einmal eingestellt wird. Ansonsten hast du wenig Möglichkeiten, ich kann mir nicht vorstellen, dass du mit der php.ini das Dateisystem ändern kannst.

mod_rewrite spielt für require aber keine Rolle, d.h. du hast da auch einen Denkfehler eingebaut. require greift auf das Dateisystem zu, nicht auf den Server.
 
Ja, ich hatte mir auch vorhin überlegt eine variable zu definieren ($root = $_SERVER['DOCUMENT_ROOT']), aber da würde einiges an Arbeit anfallen ... VIEL Arbeit ...

Und via htaccess gibt es da auch keine Möglichkeit?
Und wo ich auch gerade bei htaccess bin ^^
In Linux kann man die ja nicht sehen.
Wen ich die dann versuche mit dem Terminal zu öffnen (nano /var/www/.htaccess) dann wird mir eine leere datei angezeigt, wenn ich es mit root mache (sudo su root -> nano /var/www/.htaccess) selbes ergebnis, mit pico auch leere datei, wenn ich mit FTP versuche sie von meinem Windows-Server zu laden, steht da Öffnen der Datei .htaccess fehlgeschlagen.

Ich weiss net wie ich da an die .htaccess komme, eig hat es bisher immer funktioniert auch auf Linux-basierten Webservern. Auf Windows hat es auch funktioniert, aber wenn ich es auf Hauseigener Linux-Distribution probiere, klappts net.
*EDIT ---------------------
PS: Mittlerweile kann ich die .htaccess bearbeiten (gksudo nautilus)
Aber trotzdem findet er meine rewrites nicht -.-
 
Zuletzt bearbeitet:
Werbung:
Wie gesagt require interessiert mod_rewrite nicht, da die Zugriffe nicht über den Server erfolgen.
Du könntest nur symbolischen Links rumhantieren, da kenn ich mich aber nicht mit aus und ich weiß nicht ob das sinnvoller ist.
 
Ich habe immer noch ein Problem mit dem ersten Post. Da steht:
Aber meine Seite ist so aufgebaut dass ich das ganze vom ROOT aus aufrufen muss, also mit führendem /, weil alles über eine index.php mit mod_rewrite läuft.
zbsp.:
http://example.org/home führt auf http://example.org/index.php?site=home
http://example.org/gbook/posts/1 führt auf http://example.org/index.php?site=gb...l=posts&spec=1
Das was auf dem Dateisystem passiert und was der Pfad der URL ist sind zwei verschiedene Paar Schuhe.

Wenn du also in der index.php mit require_once() eine Datei inkludieren möchtest, dann ist diese Angabe immer relativ zur index.php und hat nicht mit dem Pfad in der URL zu tun. Dass das selbe nicht für Adressangaben im HTML gilt sollte wohl klar sein. Nur Dort braucht man die Angabe einer BASE_URL. In etwa so:
PHP:
<?php
class MyApp_Application {
    public static BASE_URL = '/foobar'; // production wohl nur ''; evtl. kommt sowas aus der Konfiguration

    public static function baseUrl() {
        return self::BASE_URL;
    }
}
Im Template/View:
PHP:
<a href="<?php print MyApp_Application::baseUrl() ?>/barbar/barabara">Link</a>

Ich weiß ja nicht, wie dein System aufgebaut ist, aber sofern das alles Klassen-basiert ist, kannst du dir mit einem Autoloader (spl_autoload()) aushelfen und alle require_once() streichen.
 
nein, eig. is es net Klassen-basiert.
Ich hab nur n paar Funktionen die für das Gästebuch und für das Newssystem da sind, aber sonst is da eher wenig los.

Das einzige Problem das ich hab is ja eig das includen und dass mein Apache meine htaccess ignoriert.
Was halt n bissel arg stört is dass ich jetzt überall das "/" bei den includes etc. in ein '$root."/" ändern darf.

Und meine htaccess funtzt scheints au net wirklich, denn wenn ich zum Beispiel auf "www/_inc/ gehe werden mir die Dateien angezeigt obwohl in der htaccess mit "Option -Indexes" das unterbunden wird ...
 
Werbung:
Das einzige Problem das ich hab is ja eig das includen und dass mein Apache meine htaccess ignoriert.
Was halt n bissel arg stört is dass ich jetzt überall das "/" bei den includes etc. in ein '$root."/" ändern darf.
Ich weiß nicht, wie oft wir dir das noch sagen müssen. require ist es schnurzpiep egal was in der htaccess Datei steht.
 
eh ... das habe ich schon verstanden.
Es geht mir aber auch darum dass wenn ich http://example.org/home eingebe da steht dass es die Datei nicht gibt
Und wenn ich selbiges in der Adressleiste bei meinem Windows-Server eingebe, dann wird die Home-Seite angezeigt.

Und ich kann auch den Index der Ordner sehen, obwohl es in der htaccess unterbunden wird ... das stört mich eig am allermeisten.
Denn ohne htaccess funtzt meine Webseite nicht so, wie ich das will.
 
Du musst bei dem Server auch einstellen, das die Angaben in der htaccess Datei benutzt werden. also irgendwas in der Art
Code:
	<Directory  "/">

		AllowOverride All
	</Directory>
 
Werbung:
Zurück
Oben