【发布时间】:2013-01-25 01:31:41
【问题描述】:
我有一个几乎可以肯定是新手的问题。我希望在写这个问题时找到问题,但我仍然卡住了。
我想更改 apache 的 DocumentRoot,但我不断收到错误消息“DocumentRoot must be a directory”。
情况:
- 代码在虚拟 VMWare 机器 4.0.4 build-744019 中运行
- linux 的版本是 Scientific Linux release 6.4 (Carbon)
- apache 的版本是 Apache/2.2.15 (Unix)(这是一个 yum 安装,什么都没有 特别)
在 httpd.conf 中
DocumentRoot "/home/stave/www"
当我重新启动时,我会收到消息
Starting httpd: Syntax error on line 292 of /etc/httpd/conf/httpd.conf:
DocumentRoot must be a directory
目前采取的步骤:
我确保目录存在:
ls -asl /home/stave
4 drwxrwxrwx. 2 stave stave 4096 Feb 9 09:08 www
It even has a file in it "index.html", so I am very sure that the directory exists
我认为这可能是一个特权问题,所以(这是一个与互联网隔离的虚拟开发机器,我正在排除故障,所以我不太担心安全性),如您所见,我将特权设置为 777。
我什至更改了运行 apache 的用户(并确认该更改适用于 ps)以确保特权不应该成为问题。
堆栈溢出
有一些堆栈溢出的答案,但大多数都说“阅读错误消息。它说该目录实际上并不存在”。其他人暗示最后可能会有一个斜杠,这会很糟糕。
其他网站
我找到的最有用的是this 建议
由于 SELinux 扩展,您可能会收到“DocumentRoot must be a directory”错误,即使它确实是一个目录。运行 system-config-securitylevel(或 redhat-config-securitylevel)为 httpd 禁用 SELinux 或授予 SELinux 权限 目录: chcon -R -h -t httpd_sys_content_t /path/to/directory*
我的 linux 版本不是 Security Enhanced Linux,所以在不理解的情况下我还是尝试了它:没有效果。
现状
我已经没有尝试的想法了,所以任何诊断问题或建议都将不胜感激
【问题讨论】:
-
第 292 行绝对是您正在查看的行吗? Grep 为 DocumentRoot 的整个配置,也许你错过了一个?
-
谢谢保罗。 Grep 在前缀中返回几个 cmets,并且有问题的行是第 292 行。(当前有问题的行指向 /var/www/html 有效)。
-
你试过在 strace 下启动 Apache 吗?可能会提供有关正在发生的事情的线索。
-
apache 是否可以访问 /home 和 /home/stave?主目录通常不是每个人都可读的。