非标准Apache端口下HTTP转HTTPS重定向及400错误求助
Apache 2.4 端口555 HTTP转HTTPS重定向及400错误解决思路
问题背景
网站部署在https://example.com:555,同一公网IP的80、443端口已转发至其他服务器,需实现http://example.com:555/1618/?id=877这类HTTP请求到对应HTTPS地址的重定向,但当前访问HTTP地址触发400错误(提示浏览器发送的请求服务器无法理解),尝试ErrorDocument、HSTS、.htaccess变量等方案均未解决。
解决步骤
1. 排查400错误根源
- 400错误大概率是Apache未监听HTTP协议的555端口,导致HTTP请求被HTTPS服务拒绝。先检查端口配置:
编辑/etc/apache2/ports.conf,添加Listen 555(用于监听HTTP请求),确保文件中已有Listen 443(HTTPS监听)。
2. 配置HTTP虚拟主机实现精准重定向
- 创建HTTP端口555的虚拟主机配置文件(如
/etc/apache2/sites-available/example-http-555.conf),写入以下内容:<VirtualHost *:555> ServerName example.com RewriteEngine On # 重定向所有HTTP请求到对应HTTPS地址,保留完整路径和查询参数 RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [L,R=301,QSA] </VirtualHost> - 启用配置并重启Apache:
a2ensite example-http-555.conf systemctl restart apache2
3. 清理无效配置
- 删除
.htaccess和localized-error-pages.conf中设置的ErrorDocument 400规则,避免干扰正常重定向逻辑。
4. 验证重写模块状态
- 确保Apache rewrite模块已启用,若未启用执行:
a2enmod rewrite systemctl restart apache2
5. 测试与日志排查
- 访问
http://example.com:555/1618/?id=877,验证是否自动跳转至目标HTTPS地址且参数id=877保留。 - 若仍有问题,查看Apache错误日志
/var/log/apache2/error.log,定位具体的请求异常细节。
内容的提问来源于stack exchange,提问作者huz_akh
相关产品推荐
相关产品推荐

