Требуется ли для виртуальных хостов в Apache опция "FollowSymLinks"?
В /etc/apache2/apache2.conf
У меня есть следующая конфигурация для Apache в отношении /var/www
каталог:
<Directory /var/www/>
Options -Indexes -Includes -ExecCGI
AllowOverride All
Require all granted
</Directory>
В /etc/apache2/sites-enabled/example.com.conf
то, как я настроил свой виртуальный хост для example.com
:
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
ServerAdmin info@example.com
DocumentRoot /var/www/example.com/public
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Пока все работает нормально.
Но как только я отредактирую <Directory /var/www/>
часть (см. выше) от
Options -Indexes -Includes -ExecCGI
в
Options -Indexes -FollowSymLinks -Includes -ExecCGI
веб-сайт перестает работать и отвечает 403
ошибка вместо
Почему это происходит? Нигде я не использовал символические ссылки, по крайней мере, сознательно. Так использует ли Apache их внутренне при работе с виртуальными хостами?
Я не вижу причин, почему этот параметр должен нарушить настройку. Сайт фактически хранится в /var/www/example.com/public
Это тоже не символическая ссылка.
1 ответ
Журналы ошибок Apache объясняют причину этой проблемы:
[rewrite: error] [pid...] [client...] AH00670: параметры FollowSymLinks и SymLinksIfOwnerMatch отключены, поэтому директива RewriteRule также запрещена из-за ее аналогичной способности обходить ограничения каталога
С помощью mod_rewrite
с RewriteRule
(как обычно) при отключении FollowSymLinks
(как показано в вопросе) возможно только если SymLinksIfOwnerMatch
включен взамен.
таким образом
-FollowSymLinks
должен стать
-FollowSymLinks +SymLinksIfOwnerMatch
или же mod_rewrite
с RewriteRule
не может быть использован больше.
Спасибо за подсказку, @fkraiem!