Jak sprawić, by Apache śledził dowiązania symboliczne?

98

W moim folderze www Apache ( /var/wwwna Ubuntu 10.10) mam:

mydir -> /home/user/mydir

(które stworzyłem ln -s)

Teraz, jeśli chcę zobaczyć listę plików mydirz Internetu, muszę podać dyrektywę Apache FollowSymLinks, prawda?

Ale gdzie to położyć? W .htaccesspliku? Gdzie? Próbowałem na wiele sposobów, ale nie rozumiem ...

To jest mój /etc/apache2/sites-enabled/000-defaultplik:

<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
źródło
Próbowałem także z aliasem w pliku konfiguracyjnym .. nadal nie działa ..
luca

Odpowiedzi:

65

Są tutaj dwie rzeczy:

  1. dowiązania symboliczne
  2. lista katalogów

dowiązania symboliczne

Zakładając, /var/wwwże DocumentRoot jest domyślnym hostem wirtualnym, powinieneś znaleźć domyślny plik konfiguracji hosta wirtualnego (prawdopodobnie /etc/apache2/sites-enabled/000-default) i umieścić go w tym bloku hosta wirtualnego, np.

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

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

Jeśli nic nie zmieniłeś, ta opcja powinna już tam być.

lista katalogów

Aby Apache wyświetlał listę plików w katalogu, musisz również włączyć tę Indexesopcję, np. Zmień

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

w /etc/apache2/sites-enabled/000-defaultdo:

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

Lub, być może, bezpieczniejszym sposobem jest zmiana na:

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

i włóż to /home/user/mydir/.htaccess.

    Option Indexes

dlaczego .htaccess nie działa

Domyślnie umieszczenie Options <something>w .htaccesspliku nie będzie działać ze względu na inny wpis w pliku konfiguracyjnym: AllowOverride None.

Dlatego musimy to AllowOverride Indexestam umieścić .

( Dokumentacja AllowOverride )

Mikel
źródło
spójrz na mój plik konfiguracyjny powyżej ... to jeszcze nie działa ...
luca
czy może to być problem z uprawnieniami? Jestem użytkownik root, wiem, że nie jest dobrą rzeczą, aby korzystać z systemu jako root, tak .. jestem korzeń i ja linku do katalogu jest w domu root / root / mydir ..
Luca
1
Tak. Jaki komunikat o błędzie widzisz? Musisz to zrobić, sudo chmod ugo+x /root; sudo chmod ugo+rx /root/mydiraby działało, a to prawdopodobnie nie jest dobry pomysł. Lepiej przenieść pliki gdzieś pod, /var/wwwjeśli możesz.
Mikel
Ilekroć pojawia się błąd i prosi o pomoc, należy podać nam dokładny komunikat o błędzie. I będą wskazówki /var/log/apache2/error.log.
Mikel
7
Upewnij się, że nie wskazujesz swojego katalogu domowego, gdy jest zaszyfrowany, tj. Symboliczny link w /var/www/home/user/directory. Spowoduje to ogromny ból głowy.
11

Opcji należy użyć w następujący sposób:

Options +FollowSymLinks

Zwykle jest umieszczany w konfiguracji Apache ( httpd.conflub conf.d/lub sites-enabled/) wewnątrz <Directory>.

Patrz Options, AllowOverridea <Directory>w dokumentacji Apache.

grawitacja
źródło
1
W przypadku FollowSymLinks MUSI znajdować się w strukturze katalogu, gdy znajduje się w pliku .conf. Z aktualnego podręcznika Apache „Opcje FollowSymLinks i SymLinksIfOwnerMatch działają tylko w sekcjach <Directory> lub plikach .htaccess.”
ClearCrescendo
1
Ostrzeżenie: mieszanie opcji z + lub - z tymi bez jest niepoprawną składnią i może powodować nieoczekiwane wyniki.
kurdtpage,
10

W oryginalnej (świeżej) konfiguracji Ubuntu 14.04 z apache 2.4.7 nie ma potrzeby zmiany czegokolwiek w * .conf, aby śledzić dowiązania symboliczne utworzone w / var / www / html.

Konieczne jest jednak, aby użytkownik www-dane miał dostęp do WSZYSTKIEJ ścieżki celu dowiązania symbolicznego (nawet dla wirtualnych hostów nie tylko dla dowiązań simlink). Na przykład,

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

W tym przykładzie dane www użytkownika (lub wszyscy użytkownicy, jeśli chcesz, ale mogą być niebezpieczne) muszą wykonywać prawa dostępu do katalogu. Potrzebujesz praw x do każdego z / path, / path / to i / path / to / mirror. Potrzebuje również uprawnień do odczytu katalogu docelowego i, zależnie od celu katalogu, być może użytkownik www-data również potrzebuje uprawnień do zapisu.

Wskazówkę uzyskano z https://stackoverflow.com/a/14623574

zwyciężyć
źródło
1

Nie mogłem tego uruchomić, dopóki nie zainstaluję modułu apache autoindex. Z licznych postów na blogach i postów na forum nikt nie wspomniał o tym, że jest to konieczne. Mam nadzieję, że to komuś pomoże.

originalbryan
źródło