Apache 中的虚拟主机是否需要启用“FollowSymLinks”选项?

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 [email protected]
    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_rewritewith RewriteRule(很常见)禁用 FollowSymLinks(如问题所示)只有SymLinksIfOwnerMatch已启用作为回报。

因此

-FollowSymLinks

必須成

-FollowSymLinks +SymLinksIfOwnerMatch

或者 mod_rewritewithRewriteRule已无法使用。

谢谢你的提示,@fkraiem!

相关内容