在 中/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_rewrite
with RewriteRule
(很常见)禁用 FollowSymLinks
(如问题所示)只有SymLinksIfOwnerMatch
在已启用作为回报。
因此
-FollowSymLinks
必須成
-FollowSymLinks +SymLinksIfOwnerMatch
或者 mod_rewrite
withRewriteRule
已无法使用。
谢谢你的提示,@fkraiem!