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

Как заставить Apache следовать симлинкам?

В моей www папке apache (/var/www на ubuntu 10.10) у меня есть:

mydir -> /home/user/mydir

(который я создал с ln -s)

Теперь, если я хочу увидеть список файлов в mydir из интернета, я должен дать apache директиву FollowSymLinks, правильно?

Но куда мне ее поместить? В файл .htaccess? Куда? Я пробовал много способов, но я не понимаю…

Это мой /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>

Ответы (4)

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

Здесь есть две вещи:

  1. symlinks
  2. directory listing

symlinks

Предположим, что /var/www является DocumentRoot для вашего виртуального хоста по умолчанию, вы должны найти файл конфигурации виртуального хоста по умолчанию (вероятно /etc/apache2/sites-enabled/000-default) и поместить его в блок виртуального хоста, e. Например,

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

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

Если вы ничего не изменили, этот параметр уже должен быть там.

список каталогов

Чтобы Apache составил список файлов в каталоге, нужно также включить параметр Indexes, e. g. изменить

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

в /etc/apache2/sites-enabled/000-default на:

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

Или, возможно, более безопасным способом будет изменить его на:

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

и поместить это в /home/user/mydir/.htaccess.

Option Indexes

почему . htaccess не работает

По умолчанию, установка Options <something> в .htaccess файл не будет работать из-за другой записи в вашем конфигурационном файле: AllowOverride None.

Поэтому мы должны поместить AllowOverride Indexes туда.

AllowOverride documentation ].

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

Опция должна использоваться следующим образом:

Options +FollowSymLinks

Обычно она помещается в конфигурацию Apache (httpd.conf или conf.d/ или sites-enabled/) внутри <Directory>.

См. ссылки Options , AllowOverride и <Directory> в документации Apache.

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

С оригинальной (свежей) конфигурацией на Ubuntu 14.04 с apache 2.4.7, нет необходимости что-либо менять в *.conf, чтобы следовать симлинкам, созданным под /var/www/html.

Но необходимо, чтобы пользователь www-data имел доступ к ALL пути к цели симлинка (даже для виртуальных хозяев, а не только для симлинка). Например,

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

В этом примере пользователю www-data (или всем пользователям, если хотите, но это может быть опасно) необходимо использовать права на весь путь к каталогу. Нужны x прав в каждом из /path, /path/to и /path/to/mirror. Также нужны права **Read на целевой каталог, и, в зависимости от цели каталога, возможно, пользователю www-data тоже нужны права на запись.

Подсказка получена из https://stackoverflow.com/a/14623574 .

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

Я не мог заставить это работать, пока не установил модуль autoindex apache. Из многочисленных сообщений в блогах и на форуме, никто не упоминал о необходимости этого. Надеюсь, это кому-нибудь поможет.