Я пытаюсь настроить сервер Apache 2 на моей машине с Arch Linux. Пока все отлично работает, включая 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
. Теперь я получаю 403 ошибки при попытке доступа к https://localhost
или что-то внутри.
Дальнейшее расследование показывает, что изменение объявления <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
? Я абсолютно каждый раз менял /srv/http
на /var/www/foo
в /etc/httpd/conf/httpd.conf
и перезапускал Apache несколько раз, но мой корень документа просто не изменился. Согласно статье Apache Arch Wiki, я сделал все, что нужно.
Я мог бы, конечно, просто symlink /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
разрешений.