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

Apache ProxyPass仅对指定子域名及目录生效的配置方法

解决Apache ProxyPass仅针对特定子域名生效的问题

这是多区域子域名场景下很常见的反向代理配置需求,你之前的问题出在把ProxyPass规则放在了全局配置或者通用VirtualHost里,导致所有子域名都继承了这个规则。下面给你两种简单可靠的解决办法:

方案一:使用独立VirtualHost配置(推荐)

最清晰的方式是给每个区域子域名单独创建VirtualHost块,只在de.domain.com的配置中加入ProxyPass规则,其他子域名的配置里不添加这条规则即可:

<VirtualHost *:80>
    ServerName de.domain.com
    # 这里填写de子域名对应新站点的文档根目录等基础配置
    DocumentRoot /var/www/html/new-site/de

    # 仅对de.domain.com生效的代理规则
    ProxyPass /blog/ http://blog.olddomain.com/de/
    ProxyPassReverse /blog/ http://blog.olddomain.com/de/
</VirtualHost>

<VirtualHost *:80>
    ServerName en.domain.com
    # en子域名的专属配置,这里没有/blog/的代理规则,自然不会生效
    DocumentRoot /var/www/html/new-site/en
</VirtualHost>

# 其他fr、jp等子域名的VirtualHost配置以此类推

这种方式的优势是配置隔离性强,每个子域名的规则互不干扰,后续维护和调整也更直观,非常适合你这种多区域子域名的架构。

方案二:用RewriteCond限定域名(适合共用VirtualHost的场景)

如果你的所有子域名都共用一个VirtualHost(比如通过ServerAlias *.domain.com统管),可以借助RewriteCond来精准匹配de.domain.com,再触发代理:

# 先确保启用rewrite模块
RewriteEngine On

# 匹配请求的主机头为de.domain.com(NC表示不区分大小写)
RewriteCond %{HTTP_HOST} ^de\.domain\.com$ [NC]
# 将/blog/开头的路径转发到旧站点的对应目录,[P]表示启用反向代理,[L]表示终止后续规则匹配
RewriteRule ^/blog/(.*)$ http://blog.olddomain.com/de/$1 [P,L]

# 必须添加这条规则来修正后端返回的响应头(比如Location),避免跳转错误
ProxyPassReverse /blog/ http://blog.olddomain.com/de/

额外注意事项

  • 确认Apache已启用必要模块:你需要确保mod_proxy、mod_proxy_http(方案二还要加mod_rewrite)已经启用,在Debian/Ubuntu系统可以用a2enmod proxy proxy_http rewrite命令开启,CentOS/RHEL则用httpd -M检查,缺失的话修改配置文件启用。
  • 测试配置有效性:修改完配置后,用apachectl configtest(或httpd -t)检查语法是否正确,没问题再重启Apache服务生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:05:31