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

Apache Mod_Rewrite去除www域名重定向失效问题求助

解决Apache移除www并强制HTTPS重定向的问题

问题根源

你当前的配置仅覆盖了**80端口(HTTP)**的请求,当用户直接访问www.yourdomain.com的HTTPS(443端口)地址时:

  1. Apache没有对应的443端口VirtualHost配置,无法处理该请求的重定向逻辑
  2. 由于SSL证书仅针对非www域名,浏览器会先弹出证书错误警告,阻断后续重定向流程
  3. 原80端口规则存在逻辑顺序问题:先将HTTP请求跳转到同域名的HTTPS(包括www),导致用户访问http://www.yourdomain.com时,会先跳转到https://www.yourdomain.com触发证书错误,而非直接跳转到非www的HTTPS

修复方案

1. 确保启用必要模块

先确认Apache已启用mod_rewrite和mod_ssl模块:

sudo a2enmod rewrite ssl
sudo systemctl restart apache2

2. 修改VirtualHost配置

替换原有配置为以下内容(注意替换yourdomain.com为你的实际域名,以及证书文件路径):

处理所有HTTP(80端口)请求

直接将所有HTTP请求(无论是否带www)跳转到HTTPS的非www域名,避免中间跳转触发证书错误:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    RewriteEngine On
    # 匹配所有带/不带www的HTTP请求,跳转到非www的HTTPS
    RewriteCond %{HTTP_HOST} ^(www\.)?(.*)$ [NC]
    RewriteRule ^ https://%2%{REQUEST_URI} [L,R=permanent]
</VirtualHost>
处理HTTPS(443端口)请求

新增两个443端口的VirtualHost:一个专门处理www域名的重定向,另一个处理主域名的正常请求:

# 处理www域名的HTTPS请求,强制跳转到非www
<VirtualHost *:443>
    ServerName www.yourdomain.com
    ErrorLog ${APACHE_LOG_DIR}/www-error.log
    CustomLog ${APACHE_LOG_DIR}/www-access.log combined

    RewriteEngine On
    RewriteRule ^ https://yourdomain.com%{REQUEST_URI} [L,R=permanent]

    # 必须配置SSL参数(即使证书不匹配,Apache才能启动)
    SSLEngine On
    SSLCertificateFile /path/to/your/certificate.crt
    SSLCertificateKeyFile /path/to/your/private.key
</VirtualHost>

# 处理主域名的HTTPS正常请求
<VirtualHost *:443>
    ServerName yourdomain.com
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    SSLEngine On
    SSLCertificateFile /path/to/your/certificate.crt
    SSLCertificateKeyFile /path/to/your/private.key

    # 其他站点配置(如目录权限等)
    <Directory /var/www>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

验证步骤

  1. 保存配置后重启Apache:
    sudo systemctl restart apache2
    
  2. 清除浏览器缓存(避免301重定向缓存干扰测试)
  3. 测试以下地址:
    • http://yourdomain.com → 应跳转到https://yourdomain.com
    • http://www.yourdomain.com → 应直接跳转到https://yourdomain.com
    • https://www.yourdomain.com → 浏览器会先提示证书错误,确认后会跳转到https://yourdomain.com

注:如果不想让用户看到证书错误,推荐使用Let's Encrypt免费申请包含yourdomain.com和www.yourdomain.com的多域名SSL证书,这样重定向过程完全无警告。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 19:22:37