2011-02-10 21:52:57 +0000 2011-02-10 21:52:57 +0000
101
101

Wie bringe ich Apache dazu, Symlinks zu folgen?

In meinem Apache-WWW-Ordner (/var/www auf ubuntu 10.10) habe ich:

mydir -> /home/user/mydir

(den ich mit ln -s erstellt habe)

Wenn ich nun eine Liste der Dateien in mydir aus dem Web sehen möchte, muss ich Apache die Direktive FollowSymLinks geben, richtig?

Aber wo lege ich sie hin? In eine .htaccess-Datei? Und wohin? Ich habe viele Möglichkeiten ausprobiert, aber ich verstehe es nicht…

Dies ist meine /etc/apache2/sites-enabled/000-default-Datei:

<VirtualHost *:80>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www
        <Directory />
                Options FollowSymLinks Indexes
                AllowOverride None
        </Directory>
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

    Alias /downloads/ "/root/mydir/"
    <Directory "/root/mydir">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>

</VirtualHost>

Antworten (4)

67
67
67
2011-02-10 21:56:40 +0000

Hier gibt es zwei Dinge:

  1. Symlinks
  2. Verzeichnisauflistung

Symlinks

Angenommen, /var/www ist Ihre DocumentRoot für Ihren Standard-Virtual-Host, dann sollten Sie Ihre Standardkonfigurationsdatei für den virtuellen Host (wahrscheinlich /etc/apache2/sites-enabled/000-default) finden und sie in diesen Block des virtuellen Hosts legen, e. g.

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>

Wenn Sie nichts geändert haben, sollte diese Option bereits vorhanden sein.

Verzeichnisauflistung

Damit der Apache die Dateien in einem Verzeichnis auflistet, müssen Sie auch die Option Indexes aktivieren, e. g. ändern Sie

<Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>

in /etc/apache2/sites-enabled/000-default in:

<Directory />
        Options FollowSymLinks Indexes
        AllowOverride None
    </Directory>

Oder, vielleicht ist ein sichererer Weg, ihn in:

<Directory />
        Options FollowSymLinks
        AllowOverride Indexes
    </Directory>

zu ändern und dies in /home/user/mydir/.htaccess zu setzen.

Option Indexes

warum . htaccess funktioniert nicht

Standardmäßig funktioniert das Setzen von Options <something> in eine .htaccess-Datei nicht, weil der andere Eintrag in Ihrer Konfigurationsdatei: AllowOverride None.

Deshalb müssen wir AllowOverride Indexes dort setzen.

AllowOverride-Dokumentation )

12
12
12
2011-02-10 22:00:05 +0000

Die Option muss wie folgt verwendet werden:

Options +FollowSymLinks

Normalerweise wird sie in der Apache-Konfiguration (httpd.conf oder conf.d/ oder sites-enabled/) innerhalb einer <Directory> gesetzt.

Siehe Options , AllowOverride und <Directory> in der Apache-Dokumentation.

10
10
10
2014-10-02 19:14:39 +0000

Mit der ursprünglichen (frischen) Konfiguration unter Ubuntu 14.04 mit Apache 2.4.7 gibt es keine Notwendigkeit, irgendetwas in *.conf zu ändern, um Symlinks zu folgen, die unter /var/www/html erstellt wurden.

Aber es ist notwendig, dass der Benutzer www-data Zugriff auf ALL den Pfad des Symlink-Ziels hat (auch für virtuelle Hosts nicht nur für Simlinks). Zum Beispiel,

cd /var/www/html
ln -s /path/to/mirror/cran-mirror cran

In diesem Beispiel benötigt der Benutzer www-data (oder alle Benutzer, wenn Sie wollen, aber das kann gefährlich sein) ausführende Rechte bis zum Verzeichnis. Benötigt jeweils x Rechte in /path, /path/to und /path/to/mirror. Benötigt auch Read-Rechte auf das Zielverzeichnis, und, abhängig vom Ziel des Verzeichnisses, braucht der Benutzer www-data vielleicht auch Schreibrechte.

Clue wurde von https://stackoverflow.com/a/14623574

1
1
1
2014-09-10 15:31:58 +0000

Ich konnte dies nicht zum Laufen bringen, bis ich das Apache-Modul für die automatische Indizierung installiert hatte. Von zahlreichen Blog- und Forenbeiträgen erwähnte niemand, dass es notwendig sei. Ich hoffe, dies hilft jemandem.