Apache 虚拟主机 独立设置不同目录权限 教程

一、核心原理

在每个 <VirtualHost> 内部,单独写一套 <Directory> 配置,只对当前网站生效
最常用的 3 种权限:
  1. 允许所有人访问(公开网站)
  2. 禁止所有人访问(私密目录)
  3. 需要账号密码才能访问(后台 / 私密文件)

二、完整配置示例(直接用)

下面是 2 个虚拟主机 + 完全不同的权限,你照着改路径即可。

1. 虚拟主机 1:完全公开(所有人可访问)

apache
<VirtualHost *:80>
    ServerName www.site1.com
    DocumentRoot "D:/xampp/htdocs/site1"

    # 独立目录权限:公开访问
    <Directory "D:/xampp/htdocs/site1">
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted   # 允许所有人访问
    </Directory>
</VirtualHost>

2. 虚拟主机 2:私密权限(仅自己 IP 可访问)

apache
<VirtualHost *:8080>
    ServerName www.site2.com
    DocumentRoot "D:/xampp/htdocs/site2"

    # 独立目录权限:仅允许你的IP访问
    <Directory "D:/xampp/htdocs/site2">
        AllowOverride All
        Require ip 127.0.0.1  # 只允许本机
        Require ip 192.168.1.100  # 只允许你的电脑IP
    </Directory>
</VirtualHost>

三、4 种最常用权限(直接复制)

1. 公开访问(默认)

apache
Require all granted

2. 禁止所有人访问

apache
Require all denied

3. 仅允许指定 IP 访问(最安全)

apache
Require ip 127.0.0.1
Require ip 192.168.1.100

4. 需要账号密码登录(HTTP 认证)

apache
AuthType Basic
AuthName "请登录"
AuthUserFile "D:/xampp/apache/conf/.htpasswd"
Require valid-user

四、关键说明(必看)

  1. <Directory> 必须写在 <VirtualHost> 里面

    这样才是当前虚拟主机独立权限

  2. 路径必须和 DocumentRoot 一致

    权限才能正确生效。

  3. AllowOverride All

    允许网站目录下的 .htaccess 生效(伪静态、自定义错误页都需要它)。

  4. Options
    • Indexes:允许显示目录文件列表
    • FollowSymLinks:支持软链接(常用)

五、修改后必须重启 Apache

  • Windows XAMPP:Stop → Start
  • Linux:
    bash
    运行
    systemctl restart httpd   # CentOS
    systemctl restart apache2 # Ubuntu
    

六、最常见错误

  1. 权限不生效

    <Directory> 写在了虚拟主机外面,变成全局权限。

  2. 403 禁止访问

    用了 Require all denied 或 IP 限制。

  3. .htaccess 不生效

    没写 AllowOverride All


总结

  1. 每个虚拟主机内部单独写 <Directory>
  2. Require 设置访问权限
  3. 路径必须与 DocumentRoot 一致
  4. 重启 Apache 生效
上一篇 文档数据库替换:MongoDB兼容性与国产化适配解决方案
下一篇 S9700对接S5700接口未配置,为什么和对端属于非VLAN1接口能互通