You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Apache使其显示文档根目录以外的目录内容?

解决Manjaro下Apache访问用户目录代码的问题

嘿,我刚好在Manjaro上折腾过类似的Apache配置问题,给你一步步捋清楚怎么解决!你已经在httpd.conf里加了目录配置,但大概率是文件系统权限或者AppArmor限制导致Apache还是访问不了你的用户目录,下面是具体的排查和解决步骤:

1. 确认Apache运行的用户/组

首先得知道Apache是以哪个用户身份运行的,在Manjaro里默认是http用户和http组,你可以用这条命令确认:

ps aux | grep httpd | grep -v grep

输出里的第一列就是运行用户,正常应该是http。

2. 修复目录权限问题

默认情况下,用户目录/home/aditya的权限是700,这意味着除了你自己,其他用户(包括Apache的http用户)根本进不去这个目录,所以首先要调整权限:

  • 先让其他用户能进入你的home目录:
    chmod o+x /home/aditya
    
  • 然后给你的代码目录设置可读可执行权限,同时确保Apache能访问:
    chmod -R 755 /home/aditya/Prog/PHP
    chown -R aditya:http /home/aditya/Prog/PHP
    
    这样你自己(aditya用户)可以修改文件,http组有读和执行权限,能正常访问目录里的内容。

3. 完善Apache的配置

你之前写的配置不完整,而且Apache 2.4已经弃用了Allow from all这类旧语法,用Require all granted就足够了。修改你的httpd.conf:

方式一:替换默认的DocumentRoot

找到原来的DocumentRoot和对应的<Directory>配置,替换成你的目录:

# 注释掉原来的默认配置
# DocumentRoot "/srv/http"
# <Directory "/srv/http">
#     ... 原来的配置 ...
# </Directory>

# 添加你的配置
DocumentRoot "/home/aditya/Prog/PHP"
<Directory /home/aditya/Prog/PHP>
    Options Indexes FollowSymLinks Includes ExecCGI
    AllowOverride All
    Require all granted
</Directory>

方式二:配置虚拟主机(更推荐)

如果不想替换默认的网站根目录,可以配置一个虚拟主机,这样访问指定域名就能到你的代码目录:

<VirtualHost *:80>
    ServerName phpdev.local  # 自定义的本地域名
    DocumentRoot /home/aditya/Prog/PHP
    <Directory /home/aditya/Prog/PHP>
        Options Indexes FollowSymLinks Includes ExecCGI
        AllowOverride All
        Require all granted
    </Directory>
    # 配置日志文件,方便排查问题
    ErrorLog /var/log/httpd/phpdev-error.log
    CustomLog /var/log/httpd/phpdev-access.log combined
</VirtualHost>

然后修改/etc/hosts,把自定义域名指向本地:

echo "127.0.0.1 phpdev.local" | sudo tee -a /etc/hosts

之后访问http://phpdev.local就能看到你的代码目录了。

4. 处理AppArmor的限制

Manjaro默认启用了AppArmor,它会限制Apache只能访问预设的目录(比如/srv/http),所以需要修改AppArmor配置让它允许访问你的代码目录:

  • 打开Apache的AppArmor配置文件:
    sudo nano /etc/apparmor.d/usr.sbin.httpd
    
  • 在文件里找到类似/srv/http/** rwk,的行,在下面添加一行:
    /home/aditya/Prog/PHP/** rwk,
    
  • 保存后重新加载AppArmor:
    sudo systemctl reload apparmor
    

5. 重启Apache并测试

最后重启Apache服务让配置生效:

sudo systemctl restart httpd

然后在你的代码目录里创建一个测试文件info.php:

<?php phpinfo(); ?>

访问对应的地址(比如http://localhost/info.php或者http://phpdev.local/info.php),如果能正常显示PHP信息,就说明配置成功了!

内容的提问来源于stack exchange,提问作者Registered User

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:34:43