上一篇
httpdini多域名重定向
- 行业动态
- 2025-04-25
- 3970
httpdini多域名重定向需检查配置文件语法,确保ServerName与虚拟主机匹配,正确设置DocumentRoot及日志路径,重启服务后验证监听端口,注意防火墙规则允许访问
环境准备
- 确保Web服务器支持重写模块:
- Apache需启用
mod_rewrite
(通过a2enmod rewrite
命令)。 - Nginx需配置
server
块和rewrite
指令。
- Apache需启用
- 域名解析:
- 所有需重定向的域名需指向同一服务器IP。
- 若使用HTTPS,需配置SSL证书(支持多域名的通配符证书或SNI)。
Apache多域名重定向配置
通过.htaccess
或httpd.conf
实现,核心是RewriteCond
和RewriteRule
。
示例1:将多个域名重定向到不同目标
RewriteEngine On # 域名1 → 目标1 RewriteCond %{HTTP_HOST} ^(?:www.)?domain1.com$ [NC] RewriteRule ^ http://target1.com%{REQUEST_URI} [L,R=301] # 域名2 → 目标2 RewriteCond %{HTTP_HOST} ^(?:www.)?domain2.com$ [NC] RewriteRule ^ http://target2.com%{REQUEST_URI} [L,R=301]
示例2:将所有子域名重定向到主域名
RewriteEngine On # 匹配任意子域名(如.example.com) RewriteCond %{HTTP_HOST} !^www.example.com$ [NC] RewriteRule ^ http://www.example.com%{REQUEST_URI} [L,R=301]
Nginx多域名重定向配置
通过server
块配置,核心是server_name
和return
指令。
示例1:将多个域名重定向到不同目标
server { listen 80; server_name domain1.com www.domain1.com; return 301 http://target1.com$request_uri; } server { listen 80; server_name domain2.com www.domain2.com; return 301 http://target2.com$request_uri; }
示例2:将所有子域名重定向到主域名
server { listen 80; server_name ~^(?:www.)?(.).example.com$; return 301 http://www.example.com$request_uri; }
关键配置对比表
功能 | Apache | Nginx |
---|---|---|
匹配域名 | RewriteCond %{HTTP_HOST} | server_name |
重定向规则 | RewriteRule + [R=301] | return 301 |
处理子域名 | 正则表达式(如^(?:www.)?domain.com ) | 正则表达式(如~^(?:www.)? ) |
保持原始URL路径 | %{REQUEST_URI} | $request_uri |
常见问题与解决方案
问题:重定向后出现循环跳转
- 原因:目标URL未正确拼接,导致重定向回原域名。
- 解决:确保
%{REQUEST_URI}
或$request_uri
包含完整路径,且目标地址不指向自身。
问题:HTTPS域名重定向到HTTP
- 原因:未配置HTTPS监听或强制跳转。
- 解决:
- Apache:添加
RewriteCond %{HTTPS} !=on
判断。 - Nginx:单独配置
listen 443
块并处理SSL。
- Apache:添加
相关问题与解答
问题1:如何测试多域名重定向是否生效?
- 解答:
- 使用
curl -I
命令检查响应状态码和Location
头,curl -I http://domain1.com # 应返回状态码301和正确的Location头
- 在浏览器中访问域名,按F12查看网络请求是否跳转到目标地址。
- 使用
问题2:如何限制仅特定域名触发重定向?
- 解答:
- 在Apache中,通过
RewriteCond
严格匹配HTTP_HOST
,RewriteCond %{HTTP_HOST} ^exact-domain.com$ [NC]
- 在Nginx中,通过
server_name
精确匹配或正则表达式排除其他
- 在Apache中,通过