我正在尝试在我的 Arch Linux 机器上设置 Apache 2 服务器。到目前为止,一切都运行良好,包括 https 和 php,但现在我想将DocumentRoot
从默认更改/srv/http
为/var/www/foo
。我分别将DocumentRoot /srv/http
和更改<Directory "/srv/http">
为DocumentRoot /var/www/foo
和<Directory "/var/www/foo">
,并使用 重新加载配置systemctl restart httpd
。现在,当我尝试访问https://localhost
或 中的任何内容时,我收到 403 错误。
进一步的调查发现,更改<Directory ...>
声明会产生影响,但更改则DocumentRoot
不会。当我着手Require all granted
消除<Directory />
这些 403 错误时,Apache 仍在尝试从 提供文档/srv/http
。例如,我将包含 的 test.php 文件放入<?php echo exec('pwd'); ?>
和 中/srv/http/
,并/var/www/foo/
访问浏览器的https://localhost/test.php
输出/srv/http
。尝试访问位于/var/www/foo
但不在 的文档/srv/http
将导致 404 错误。
为什么 Apache 仍在使用?我把中/srv/http
的所有 都改成了,并多次重启了 Apache ,但我的文档根目录就是没有变化。根据 Apache Arch Wiki 文章,我已经做了所有必要的事情。/srv/http
/var/www/foo
/etc/httpd/conf/httpd.conf
我当然可以通过符号链接/srv/http
到所需的位置,但这似乎不是正确的方法。
httpd.config
以下是我认为可能相关的部分:
<Directory />
AllowOverride none
Require all granted # Will of course change to denied again once everything works
</Directory>
DocumentRoot "/var/www/foo"
<Directory "/var/www/foo">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
当然,/var/www/foo
其本身以及所有父目录至少都具有755
权限。
答案1
你有什么虚拟主机中的部分httpd.conf
?如果您有一个VirtualHost
部分将/srv/http
其设置为DocumentRoot
,则 Apache 可能正在使用该VirtualHost
部分中的目录,即使您已更改了部分DocumentRoot
外部的值VirtualHost
。