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

Apache配置问题:将子目录访问重定向至子域名

Apache子目录重定向至子域名+访问控制配置方案

1. 启用必要Apache模块

首先确保启用重写和别名模块(若用Alias指向子目录):

a2enmod rewrite
a2enmod alias

执行后重启Apache生效:

systemctl restart apache2

2. 主域名(example.cloud)VirtualHost配置

修改主域名的HTTPS虚拟主机配置,添加重定向规则并限制直接访问:

<VirtualHost *:443>
    ServerName example.cloud
    DocumentRoot /var/www/html
    # 保留原有SSL配置(SSLCertificateFile、SSLCertificateKeyFile等)

    # 开启重写引擎
    RewriteEngine On

    # 匹配直接访问子目录的请求,重定向到子域名
    RewriteCond %{HTTP_HOST} ^example\.cloud$
    RewriteRule ^/subdirectory1/subdirectory2/(.*)$ https://subdomain.example.cloud/$1 [R=301,L]

    # 严格限制直接访问子目录(仅允许子域名请求)
    <Directory "/var/www/html/subdirectory1/subdirectory2">
        # 先默认拒绝所有
        Require all denied
        # 匹配子域名的请求,设置允许环境变量
        RewriteCond %{HTTP_HOST} ^subdomain\.example\.cloud$
        RewriteRule ^ - [E=ALLOWED_SUBDOMAIN:1]
        # 仅允许带有该环境变量的请求
        Require env ALLOWED_SUBDOMAIN
    </Directory>
</VirtualHost>

3. 子域名(subdomain.example.cloud)VirtualHost配置

确保子域名正确指向目标子目录,权限设置正常:

<VirtualHost *:443>
    ServerName subdomain.example.cloud
    DocumentRoot /var/www/html/subdirectory1/subdirectory2
    # 保留原有SSL配置

    <Directory "/var/www/html/subdirectory1/subdirectory2">
        Options FollowSymLinks MultiViews
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

4. 替代方案:使用.htaccess(无需修改主配置)

若没有权限修改VirtualHost配置,可在主域名根目录的.htaccess中添加:

RewriteEngine On
# 重定向直接访问子目录的请求到子域名
RewriteCond %{HTTP_HOST} ^example\.cloud$
RewriteRule ^subdirectory1/subdirectory2/(.*)$ https://subdomain.example.cloud/$1 [R=301,L]

常见问题排查

  • 执行apache2ctl configtest检查配置语法错误,确保无拼写失误
  • 301重定向会被浏览器缓存,测试阶段可改用R=302临时重定向,避免缓存干扰
  • 若之前配置过ProxyPass,确保重写规则放在ProxyPass指令之前,否则会被覆盖
  • 确认子目录的文件系统权限正确,Apache进程拥有读取权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 07:32:37