IIS 10中HTTPS转HTTP重定向失败(404错误)求助
解决IIS 10中HTTPS转HTTP重定向(适配ADFS SSO本地测试)
嘿,我看你遇到的问题是想用URL重写把HTTPS请求转成HTTP,但当前规则没生效还返回404对吧?这是因为你的配置里有两个核心问题,我给你拆解下并提供解决方案:
你的现有规则问题分析
- 动作类型选错了:你用了
Rewrite(服务器内部请求改写),但你需要的是让浏览器地址栏跳转到HTTP,这得用Redirect(客户端重定向)才行。Rewrite只会在服务器内部处理,浏览器地址栏还是HTTPS,而且ADFS的回调校验会不通过。 - URL拼接有问题:
{REQUEST_URI}本身就包含开头的斜杠,你直接拼接成http://{HTTP_HOST}/{REQUEST_URI}会得到类似http://your-domain//path的URL,双斜杠会导致IIS找不到资源,返回404。
正确的URL重写规则
把你现有的规则替换成下面这个配置,就能解决问题:
<rule name="Force HTTP from HTTPS" enabled="true" stopProcessing="true"> <match url="(.*)" /> <conditions> <add input="{HTTPS}" pattern="on" ignoreCase="true" /> </conditions> <action type="Redirect" url="http://{HTTP_HOST}/{R:1}" redirectType="Temporary" /> </rule>
重点解释:
redirectType="Temporary":用302临时重定向,测试阶段改起来方便,后续如果需要永久重定向可以换成Permanent(301)。{R:1}:这是引用match url="(.*)"捕获到的路径部分,能完美避免双斜杠的问题,比用{REQUEST_URI}靠谱多了。
额外要检查的几个点
光改规则可能还不够,你得确认这些配置:
- URL重写模块是否安装:打开IIS管理器,看看站点的功能视图里有没有「URL重写」图标,如果没有,得先从IIS官方把这个模块装上,不然规则根本不会生效。
- HTTP绑定是否正确:确保你的站点已经加了HTTP协议的绑定(默认端口80),如果用了主机头,HTTP和HTTPS的主机名要保持一致。
- ADFS信赖方配置:ADFS那边的信赖方信任设置里,重定向URI必须填你本地的HTTP地址(比如
http://your-local-dev-domain/adfs-callback),不然ADFS会直接拒绝回调请求,这也可能表现为404。 - 站点文件权限:检查下应用程序池的身份有没有权限访问站点的文件,有时候权限不足也会导致看似规则问题的404。
测试步骤
改完配置后,直接在浏览器访问你的HTTPS地址,正常情况下地址栏会自动跳转到HTTP,同时能加载正常页面而不是404。如果还是有问题,打开IIS的「失败请求跟踪规则」,能帮你排查重定向过程中哪里出了问题。
内容的提问来源于stack exchange,提问作者Tony
相关产品推荐
相关产品推荐

