在IIS 8.5中使用URL Rewrite实现HTTP转HTTPS重定向问题排查
解决IIS 8.5中HTTP转HTTPS重定向丢失表单数据的问题
这个坑我之前帮好几个开发者踩过——核心原因是你用的默认重定向状态码(301/302)会把POST请求强制转换成GET,表单里的用户名、密码自然就丢了。要解决这个问题,只需要把重定向规则改成保留请求方法和数据的状态码就行,具体操作分两种方式:
方式一:通过IIS图形界面修改规则
- 打开IIS管理器,定位到你的目标站点,找到并进入「URL Rewrite」模块
- 在规则列表里找到你现有的「HTTP转HTTPS」规则,双击进入编辑页面
- 切换到「操作」标签页,把「重定向类型」从默认的「临时(302)」或「永久(301)」,改成「临时重定向(307)」或者「永久重定向(308)」
- 点击「应用」保存规则,之后测试表单提交就能看到数据被保留了
方式二:手动修改web.config配置文件
如果图形界面操作不方便,直接改站点根目录下的web.config更高效。找到<rewrite>节点下的对应规则,修改redirectType属性:
原规则(会丢失数据)
<rule name="HTTP to HTTPS Redirect" stopProcessing="true"> <match url="(.*)" /> <conditions> <add input="{HTTPS}" pattern="off" ignoreCase="true" /> </conditions> <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Found" /> <!-- Found对应302 --> </rule>
修改后的规则(保留表单数据)
<rule name="HTTP to HTTPS Redirect" stopProcessing="true"> <match url="(.*)" /> <conditions> <add input="{HTTPS}" pattern="off" ignoreCase="true" /> </conditions> <!-- 选择其中一种redirectType --> <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Temporary" /> <!-- Temporary对应307,临时重定向 --> <!-- <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" /> <!-- Permanent对应308,永久重定向 --> </rule>
关于307和308的区别
- 307临时重定向:告诉浏览器这是临时的地址变更,会严格保留原请求的方法(POST)和所有表单数据,适合还在测试HTTPS配置的场景
- 308永久重定向:和307一样保留请求方法和数据,但会告诉浏览器这个地址变更永久有效,适合已经确定全站HTTPS的生产环境
额外注意事项
- 现在主流浏览器(Chrome、Firefox、Edge、Safari)都完美支持307/308,不用太担心兼容性问题;如果还有老IE用户,可能需要额外处理,但现在这类场景已经很少了
- 测试时可以打开浏览器开发者工具(F12),查看网络请求的状态码和请求方法,确认重定向后依然是POST请求
内容的提问来源于stack exchange,提问作者Surabhi
相关产品推荐
相关产品推荐

