Як змусити 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>

Я також спробував за допомогою псевдоніма в файлі конфігурації .. до сих пір не працює ..
Luca

Відповіді:


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.

( Дозволити документацію для перегляду )


подивіться на мій конфігураційний файл вище ... він ще не працює ...
luca

чи може це бути проблема дозволів? Я користувач root, я знаю, що це не добре використовувати систему як корінь, у будь-якому випадку .. Я корінь і каталог, до якого я посилаюсь, знаходиться в домашній корінь / root / mydir ..
lu

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-дані мали доступ до ВСІХ шляху проходження цілі посилання (навіть для віртуальних хостів, а не лише для посилань). Наприклад,

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

У цьому прикладі користувачеві www-data (або всім користувачам, якщо ви хочете, але це може бути небезпечно) потрібно виконувати права на весь каталог. Потрібні права x у кожному з / шлях, / шлях / до та / шлях / до / дзеркала. Також потрібен дозвіл на читання в цільовому каталозі, і, залежно від мети каталогу, можливо, користувачеві www-data потрібні також дозволи на запис.

Підказку було отримано з https://stackoverflow.com/a/14623574


1

Я не зміг цього працювати, поки не встановив модуль apache autoindex. З численних дописів у блогах та на форумах ніхто не згадував про необхідність. Сподіваюся, що це комусь допоможе.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.