如何在Apache中将通配符泛子域名重定向到指定子域名
Apache泛子域名重定向到指定站点解决方案
前置准备
- 首先配置DNS泛解析记录:添加一条A/AAAA记录,主机记录填
*,指向Apache服务器的公网IP,确保所有未单独配置的子域名请求能到达服务器 - 确认Apache已加载
mod_alias和mod_rewrite模块,可执行apache2ctl -M(Debian/Ubuntu系)或httpd -M(CentOS/RHEL系)校验,未加载的话修改对应配置开启模块即可
方案1:默认虚拟主机匹配(最稳定,推荐)
Apache虚拟主机默认按配置加载顺序匹配,精确域名的配置优先级高于通配域名,将通配虚拟主机放在所有子域名配置的最前面,就能自动匹配所有未单独配置的子域名请求:
- 打开虚拟主机配置文件,常见路径:
- Debian/Ubuntu:
/etc/apache2/sites-available/000-default.conf - CentOS/RHEL:
/etc/httpd/conf.d/vhost.conf
- Debian/Ubuntu:
- 添加如下配置,确保该配置在其他单独配置的子域名虚拟host之前:
<VirtualHost *:80> ServerName catchall.example.com ServerAlias *.example.com Redirect permanent / https://error.example.com/ </VirtualHost>
如需处理HTTPS请求,额外添加443端口的通配虚拟主机配置即可,注意要配套部署泛域名SSL证书,重定向规则同上
- 校验配置合法性:执行
apache2ctl configtest(Debian/Ubuntu系)或httpd -t(CentOS/RHEL系),提示Syntax OK后重载服务生效:systemctl reload apache2(或对应systemctl reload httpd)
方案2:.htaccess规则适配(适合无服务器配置修改权限场景)
如果无法直接修改Apache核心配置,可在站点根目录下创建.htaccess文件,添加如下规则:
RewriteEngine On RewriteCond %{HTTP_HOST} !^error\.example\.com$ [NC] RewriteRule ^(.*)$ https://error.example.com/$1 [L,R=301]
该方案需要先确认对应站点配置中已开启
AllowOverride All,否则.htaccess规则不会生效
内容的提问来源于stack exchange,提问作者user15448629
相关产品推荐
相关产品推荐

