WordPress多站点子站HTTP访问错误重定向至主站问题求助
WordPress多站点HTTP转HTTPS子站错误跳主站的解决方法
问题根源
HTTP访问子站时%{HTTP_HOST}返回主站域名,说明Apache的HTTP虚拟主机配置未正确匹配子站域名,导致所有HTTP请求默认走主站配置,重定向时误用主站域名。
解决步骤
1. 修正Apache HTTP虚拟主机配置(/etc/apache2/sites-available/000-default.conf)
确保配置中包含子站的域名解析,让Apache能识别子站的HTTP请求:
- 方案一:在主站虚拟主机块添加子站别名
<VirtualHost *:80> ServerName main-site.com ServerAlias child.org www.child.org DocumentRoot /var/www/html RewriteEngine On # 通用HTTPS重定向,保留请求的原始域名 RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L] </VirtualHost> - 方案二:为子站单独创建虚拟主机块(更清晰)
<VirtualHost *:80> ServerName main-site.com DocumentRoot /var/www/html RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L] </VirtualHost> <VirtualHost *:80> ServerName child.org ServerAlias www.child.org DocumentRoot /var/www/html RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L] </VirtualHost> - 启用rewrite模块并重启Apache:
a2enmod rewrite systemctl restart apache2
2. 调整WordPress根目录.htaccess配置
确保重定向规则优先执行,且不硬编码主站域名:
RewriteEngine On RewriteBase / # 先处理HTTP转HTTPS的重定向 RewriteCond %{HTTPS} !=on RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # 多站点核心规则 RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]
3. 检查HTTPS虚拟主机配置(/etc/apache2/sites-enabled/000-default-le-ssl.conf)
确保HTTPS配置也包含子站域名,避免HTTPS访问出现异常:
<VirtualHost *:443> ServerName main-site.com ServerAlias child.org www.child.org DocumentRoot /var/www/html # 保留原有SSL证书配置(如Let's Encrypt自动生成的内容) SSLCertificateFile /etc/letsencrypt/live/main-site.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/main-site.com/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf </VirtualHost>
如果子站使用独立SSL证书,需单独创建对应虚拟主机块。
4. 验证MU Domain Mapping插件设置
- 确认插件已正确添加
child.org的域名映射,指向主站服务器IP - 开启插件中的Redirect administration pages to site's domain选项,确保后台跳转正常
5. 测试与缓存清除
- 用隐私模式或清空浏览器缓存访问
http://child.org,检查是否跳转到https://child.org - 用curl命令验证重定向:
正常返回的curl -I http://child.orgLocation字段应为https://child.org
内容的提问来源于stack exchange,提问作者Bryan
相关产品推荐
相关产品推荐

