Назад | Перейти на главную страницу

Как параметры работают в Apache

В исходный httpd.conf у меня есть

Options Indexes FollowSymLinks

Я создал файл конфигурации в /etc/httpd/conf.d/ с помощью

NameVirtualHost 192.168.0.2:8009
<VirtualHost  192.168.0.2:8009>
    DocumentRoot /var/www/html/deve
    ServerName "deve:8009"
    ErrorLog /var/www/deve_errorlog
    CustomLog /var/www/deve_customlog common
    Options -ExecCGI -Indexes
</VirtualHost>

Я перезапускаю сервер и все еще вижу файлы в

http://192.168.0.2:8009/images

Я подумал, что более конкретное правило имеет приоритет над общим

Где я что-то упускаю?

Вы в основном правы, однако упускаете тонкость в использовании опций.

Однако сначала не вставляйте их просто в контейнер NameVirtualHost, используйте оператор каталога ...

Вы правы в том, что применяются наиболее конкретные из них, однако, если оператор параметров содержит список параметров, где все имеет префикс + или -, то параметры объединяются с любыми существующими параметрами ...

Это означает

Options Indexes FollowSymLinks

сливается с

Options -ExecCGI -Indexes

формировать

Options Indexes FollowSymLinks -ExecCGI

Взгляните на документацию apache http://httpd.apache.org/docs/2.2/mod/core.html

и конкретно в примере:

... если вторая директива Options использует символы + и -:

<Directory /web/docs>
   Options Indexes FollowSymLinks
</Directory>

<Directory /web/docs/spec>
   Options +Includes -Indexes
</Directory>

то параметры FollowSymLinks и Includes устанавливаются для /web/docs/spec каталог.

Следовательно, поведение Apache с вашей конфигурацией является правильным.

Я бы просто явно объявил параметры для NameVirtualHost следующим образом:

<Directory /var/www/html/deve>
  Options +FollowSymlinks -Indexes -ExecCGI
</Directory>