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


98

В моей папке apache www ( /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>

Я также пытался с псевдонимом в файле конфигурации .. все еще не работает ..
Лука

Ответы:


65

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

  1. симлинки
  2. список каталогов

симлинки

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

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

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

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

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

Чтобы сделать Apache списком файлов в каталоге, вам также необходимо включить Indexesопцию, например, изменить

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


посмотрите на мой конфигурационный файл выше ... он еще не работает ...
Лука

это может быть проблема разрешений? Я пользователь root, я знаю, что использовать систему в качестве пользователя root не очень хорошо. В любом случае, я являюсь пользователем root и каталог, на который я имею символическую ссылку, находится в корневом каталоге home / root / mydir ..
luca

1
Да. Какое сообщение об ошибке вы видите? Вам нужно будет сделать sudo chmod ugo+x /root; sudo chmod ugo+rx /root/mydirэто, чтобы это работало, и это, вероятно, не очень хорошая идея. Лучше переместить файлы куда-нибудь под, /var/wwwесли можете.
Микель

Всякий раз, когда вы получаете сообщение об ошибке и просите о помощи, вы должны предоставить нам точное сообщение об ошибке. И там будут подсказки /var/log/apache2/error.log.
Микель

7
Убедитесь, что вы не указываете на свой домашний каталог, если он у вас зашифрован, то есть символическая ссылка в /var/www/home/user/directory. Это вызовет огромную головную боль.

11

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

Options +FollowSymLinks

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

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


1
В частности, в случае FollowSymLinks он ДОЛЖЕН быть внутри структуры Справочника, когда находится внутри файла .conf. Из текущего руководства Apache «Параметры FollowSymLinks и SymLinksIfOwnerMatch работают только в разделах <Directory> или в файлах .htaccess».
ClearCrescendo

1
Предупреждение: смешивание опций с + или - с теми, у кого нет, не является допустимым синтаксисом и может привести к неожиданным результатам.
kurdtpage

10

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

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

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

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

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


1

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.