当前位置:首页 > 行业动态 > 正文

httpdini多域名重定向

httpdini多域名重定向需检查配置文件语法,确保ServerName与虚拟主机匹配,正确设置DocumentRoot及日志路径,重启服务后验证监听端口,注意防火墙规则允许访问

环境准备

  1. 确保Web服务器支持重写模块
    • Apache需启用mod_rewrite(通过a2enmod rewrite命令)。
    • Nginx需配置server块和rewrite指令。
  2. 域名解析
    • 所有需重定向的域名需指向同一服务器IP。
    • 若使用HTTPS,需配置SSL证书(支持多域名的通配符证书或SNI)。

Apache多域名重定向配置

通过.htaccesshttpd.conf实现,核心是RewriteCondRewriteRule

示例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_namereturn指令。

示例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

常见问题与解决方案

  1. 问题:重定向后出现循环跳转

    • 原因:目标URL未正确拼接,导致重定向回原域名。
    • 解决:确保%{REQUEST_URI}$request_uri包含完整路径,且目标地址不指向自身。
  2. 问题:HTTPS域名重定向到HTTP

    • 原因:未配置HTTPS监听或强制跳转。
    • 解决
      • Apache:添加RewriteCond %{HTTPS} !=on判断。
      • Nginx:单独配置listen 443块并处理SSL。

相关问题与解答

问题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精确匹配或正则表达式排除其他
0