Wie bringe ich Apache dazu, Symlinks zu folgen?

98

In meinem Apache-WWW-Ordner ( /var/wwwunter Ubuntu 10.10) habe ich:

mydir -> /home/user/mydir

(das habe ich mit erstellt ln -s)

Nun, wenn ich eine Liste der Dateien im mydirWeb sehen will , muss ich Apache die Direktive geben FollowSymLinks, richtig?

Aber wo lege ich es hin? In einer .htaccessDatei? Wo? Ich habe viele Möglichkeiten ausprobiert, aber ich verstehe es nicht ...

Das ist meine /etc/apache2/sites-enabled/000-defaultAkte:

<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>
luca
quelle
Ich habe auch versucht, mit einem Alias ​​in der Konfigurationsdatei .. funktioniert immer noch nicht ..
Luca

Antworten:

65

Hier gibt es zwei Dinge:

  1. symlinks
  2. Verzeichnisliste

symlinks

Angenommen, /var/wwwIhr DocumentRoot ist Ihr virtueller Standardhost. Sie sollten (wahrscheinlich /etc/apache2/sites-enabled/000-default) Ihre virtuelle Standardhost-Konfigurationsdatei finden und in diesen virtuellen Host-Block einfügen, z

<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.

Verzeichnisliste

Damit Apache die Dateien in einem Verzeichnis auflistet, müssen Sie auch die IndexesOption aktivieren , z. B. Ändern

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

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

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

Oder vielleicht ist eine sicherere Möglichkeit, es zu ändern:

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

und setzen Sie dies in /home/user/mydir/.htaccess.

    Option Indexes

warum .htaccess nicht funktioniert

Standardmäßig setzt Options <something>in einer .htaccessnicht wegen des anderen Eintrags in der Konfigurationsdatei Datei arbeiten: AllowOverride None.

Deshalb müssen wir dort setzen AllowOverride Indexes.

( AllowOverride-Dokumentation )

Mikel
quelle
schau in meine Konfigurationsdatei oben ... es funktioniert noch nicht ...
Luca
Kann es ein Problem der Berechtigungen sein? Ich bin root-Benutzer, ich weiß, es ist sowieso nicht gut, ein System als root zu verwenden. Ich bin root und das Verzeichnis, auf das ich einen Symlink setze, befindet sich im root-Verzeichnis home / root / mydir.
luca
1
Ja. Welche Fehlermeldung sehen Sie? Sie müssen etwas tun sudo chmod ugo+x /root; sudo chmod ugo+rx /root/mydir, damit es funktioniert, und das ist wahrscheinlich keine gute Idee. Verschieben Sie die Dateien lieber irgendwo hinunter, /var/wwwwenn Sie können.
Mikel
Wenn Sie eine Fehlermeldung erhalten und um Hilfe bitten, sollten Sie uns die genaue Fehlermeldung mitteilen. Und es wird Hinweise geben /var/log/apache2/error.log.
Mikel
7
Stellen Sie sicher, dass Sie nicht auf Ihr Home-Verzeichnis zeigen, wenn Sie es verschlüsselt haben, dh einen symbolischen Link in /var/www/home/user/directory. Es wird große Kopfschmerzen verursachen.
11

Die Option muss folgendermaßen verwendet werden:

Options +FollowSymLinks

Normalerweise wird es in der Apache-Konfiguration ( httpd.confoder conf.d/oder sites-enabled/) innerhalb von a abgelegt <Directory>.

Siehe Options, AllowOverrideund <Directory>in Apache - Dokumentation.

Grawity
quelle
1
Insbesondere bei FollowSymLinks MUSS es sich innerhalb einer Verzeichnisstruktur befinden, wenn es sich in einer .conf-Datei befindet. Aus dem aktuellen Apache-Handbuch "Die Optionen FollowSymLinks und SymLinksIfOwnerMatch funktionieren nur in <Directory> -Abschnitten oder .htaccess-Dateien."
ClearCrescendo
1
Warnung: Das Mischen von Optionen mit einem + oder - mit solchen ohne Syntax ist ungültig und führt wahrscheinlich zu unerwarteten Ergebnissen.
Kurdtpage
10

Mit der ursprünglichen (frischen) Konfiguration unter Ubuntu 14.04 mit Apache 2.4.7 muss nichts in der * .conf geändert werden, um den unter / var / www / html erstellten Symlinks zu folgen.

Aber es ist notwendig , dass Benutzer www-data hat Zugriff auf ALL dem Weg der Symlink Ziel (auch für Virtual 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, die gefährlich sein können) Ausführungsrechte bis zum Verzeichnis. Benötige x Rechte in jedem von / path, / path / to und / path / to / mirror. Auch muss Read - Berechtigung für das Zielverzeichnis, und, abhängig vom Ziel des Verzeichnisses, vielleicht Benutzer www-data benötigen Schreibberechtigungen zu.

Hinweise wurden von https://stackoverflow.com/a/14623574 erhalten

victe
quelle
1

Ich konnte das nicht zum Laufen bringen, bis ich das Autoindex-Apache-Modul installiert hatte. Von den zahlreichen Blog-Posts und Forum-Posts erwähnte niemand, dass dies notwendig sei. Hoffe das hilft jemandem.

Originalbryan
quelle