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

Jak przekonać Apache'a do podążania za symlacjami?

W moim katalogu www apache'a (/var/www na ubuntu 10.10) mam:

mydir -> /home/user/mydir

(który stworzyłem za pomocą ln -s)

Teraz, jeśli chcę zobaczyć listę plików w mydir z sieci, muszę dać apache'owi dyrektywę FollowSymLinks, prawda?

Ale gdzie ją umieścić? W pliku .htaccess? Gdzie? Próbowałem wielu sposobów, ale nie rozumiem tego…

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

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

Odpowiedzi (4)

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

Są tu dwie rzeczy:

  1. symulacje
  2. lista katalogów

symulacje

Zakładając, że /var/www jest twoim DocumentRoot dla domyślnego wirtualnego hosta, powinieneś znaleźć domyślny plik konfiguracyjny wirtualnego hosta (prawdopodobnie /etc/apache2/sites-enabled/000-default) i umieścić go wewnątrz tego bloku, e. g.

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

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

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

wykaz katalogów

Aby zrobić listę plików w katalogu Apache'a, należy włączyć opcję Indexes, np. g. change

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

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

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

Or, perhaps a more secure way is to change it to:

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

and put this in /home/user/mydir/.htaccess.

Option Indexes

why . htaccess nie działa

Domyślnie, umieszczenie Options <something> w pliku .htaccess nie będzie działać z powodu innego wpisu w pliku konfiguracyjnym: AllowOverride None.

Dlatego musimy umieścić tam AllowOverride Indexes.

AllowOverride documentation )

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

Opcja ta musi być używana w następujący sposób:

Options +FollowSymLinks

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

Zobacz Options , AllowOverride oraz <Directory> w dokumentacji Apache'a.

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

Z oryginalną (świeżą) konfiguracją na Ubuntu 14.04 z apache'em 2.4.7, nie ma potrzeby zmieniać niczego w *.conf aby podążać za symlinkami stworzonymi pod /var/www/html.

Ale konieczne jest aby użytkownik www-data miał dostęp do ALL ścieżki docelowej symlink (nawet dla wirtualistów nie tylko dla simlinków). Dla przykładu,

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

W tym przykładzie użytkownik www-data (lub wszyscy użytkownicy, jeśli chcą, ale mogą być niebezpieczni) potrzebuje wykonać prawa do całego katalogu. Potrzebuje x praw w każdym z /path, /path/to, oraz /path/to/mirror. Potrzebuje również Uprawnienia do odczytu w katalogu docelowym, a w zależności od celu katalogu, być może użytkownik www-data również potrzebuje uprawnień do zapisu.

Clue został uzyskany z https://stackoverflow.com/a/14623574

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

Nie mogłem tego zrobić, dopóki nie zainstalowałem modułu autoindex apache. Z wielu postów na blogach i forach, nikt nie wspomniał, że jest to konieczne. Mam nadzieję, że to komuś pomoże.