htaccess配置301重定向丢失HTTPS且出现307跳转问题求助
.htaccess重定向异常问题修复方案
根因说明
- 你配置的
protossl环境变量未在重定向规则中实际调用,且使用相对路径执行重定向未指定协议,最终导致HTTPS丢失 - 若原始请求为POST类型,浏览器默认会修改301重定向的请求方法,部分浏览器为保留原请求方法和请求体,会自动将301升级为307重定向,强制使用HTTPS绝对路径重定向即可解决该异常
修复后的配置
你可以直接使用强制HTTPS的简化配置,代码如下:
<IfModule mod_rewrite.c> RewriteEngine on # 先统一强制跳转HTTPS,避免协议丢失 RewriteCond %{HTTPS} !=on RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [L,R=301] # 旧文件夹到新文件夹的重定向,使用绝对路径保证协议正确 RewriteRule ^old_folder/(.*)$ https://%{HTTP_HOST}/new_folder/$1 [L,QSA,R=301] </IfModule>
如果你需要保留原有的protossl变量写法,可修改为如下配置:
<IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^ - [E=protossl] RewriteCond %{HTTPS} on RewriteRule ^ - [E=protossl:s] # 重定向时调用protossl变量拼接协议,使用完整绝对路径 RewriteRule ^old_folder/(.*)$ http%{ENV:protossl}://%{HTTP_HOST}/new_folder/$1 [L,QSA,R=301] </IfModule>
验证注意事项
- 修改配置后重启Apache服务
- 清理浏览器缓存(301为永久重定向,浏览器会长期缓存旧规则)
- 重新发起请求验证重定向状态码和协议
内容的提问来源于stack exchange,提问作者symfony user
相关产品推荐
相关产品推荐

