Apache HTTPD端口重定向异常问题求助
Apache HTTPD端口重定向异常问题求助
嘿,这个问题我之前也碰到过!核心原因是%{HTTP_HOST}这个变量会完整包含请求里的主机名+端口号(也就是你这里的example.com:8555),直接拼上:8443自然就会出现双端口的尴尬情况啦。给你两个靠谱的解决办法:
方法一:固定域名直接写死(适合域名不变的场景)
如果你的服务域名是固定的example.com,那直接把域名硬写到RewriteRule里就行,完全不用依赖%{HTTP_HOST}:
<VirtualHost *:8555> SSLEngine on # 你的SSL配置内容 RewriteEngine on # 加上R=301(永久重定向,SEO友好)和L(终止后续规则处理)标志 RewriteRule ^(.*)$ https://example.com:8443%{REQUEST_URI} [R=301,L] </VirtualHost>
方法二:动态提取主机名(适合多域名/域名不固定的场景)
要是你需要适配多个域名,不想硬写死,那就用正则把%{HTTP_HOST}里的主机名单独提取出来,去掉端口部分:
<VirtualHost *:8555> SSLEngine on # 你的SSL配置内容 RewriteEngine on # 用正则捕获冒号前的主机名部分 RewriteCond %{HTTP_HOST} ^([^:]+):?.*$ # 用%1引用捕获到的主机名,拼接目标端口 RewriteRule ^(.*)$ https://%1:8443%{REQUEST_URI} [R=301,L] </VirtualHost>
简单解释下正则^([^:]+):?.*$:它会匹配从开头到第一个冒号的所有字符(也就是纯主机名),后面的:?.*用来忽略可能存在的端口号。%1就是这个捕获到的纯主机名,这样拼接出来的地址就不会带原来的8555端口啦。
记得测试的时候可以先把R=301改成R=302(临时重定向),确认没问题再换成301,避免浏览器缓存错误的重定向规则哦~
备注:内容来源于stack exchange,提问作者user1207177
相关产品推荐
相关产品推荐

