URL 的 IIS 配置重写抛出 Http404 错误
IIS configuration for URL rewrite throwing Http404 error
我在一个网站上工作,我需要 URL 从 http 重定向到 https。我的 URL 看起来像:(我每次使用随机令牌 ID 生成此 URL)
http://testsite.local/login.aspx/activate?token=(random 生成的代币 id)
我想将此 URL 重定向到
https://testsite.local/login.aspx/activate?token=(random 生成的代币 id)
下面是 IIS 中的 URL 重写设置:
Web.config 文件:
<rewrite>
<rules>
<rule name="http redirect">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="^OFF$" />
</conditions>
<action type="Rewrite" url="https://{HTTP_HOST}{REQUEST_URI}" logRewrittenUrl="true" />
</rule>
</rules>
</rewrite>
当我输入 URL 时,我看到了 Http404 错误。在这里提一下——我检查了 IIS 中的 'SSL required' 条件。我知道匹配模式看起来不对,但不确定修复方法。有帮助吗?
尝试将 {REQUEST_URI}
更改为 {R:1}
可能会解决此问题。
- {R:x} 用作规则模式 () 的反向引用。
在我的机器上工作。
像这样:
<rule name="HTTPS rewrite" enabled="true" stopProcessing="true">
<match url="(.*)"/>
<conditions>
<add input="{HTTPS}" pattern="^OFF$"/>
</conditions>
<action type="Rewrite" url="https://{HTTP_HOST}{R:1}" logRewrittenUrl="true" />
</rule>
顺便说一下,您提到需要将 HTTP 流量 Redirect
转换为 HTTPS。但是您似乎正在尝试 Rewrite
将 HTTP 流量传输到用作反向代理的 HTTPS。
如果您想配置正确的 301 HTTP 重定向,请使用 Redirect
而不是 Rewrite
。
像这样:
<rule name="HTTPS force" enabled="true" stopProcessing="true">
<match url="(.*)"/>
<conditions>
<add input="{HTTPS}" pattern="^OFF$"/>
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent"/>
</rule>
我遵循了@Anduin 提到的更改。除了这些更改之外,我还为该站点创建了一个端口 80 绑定,该规则运行良好。
我在一个网站上工作,我需要 URL 从 http 重定向到 https。我的 URL 看起来像:(我每次使用随机令牌 ID 生成此 URL)
http://testsite.local/login.aspx/activate?token=(random 生成的代币 id)
我想将此 URL 重定向到
https://testsite.local/login.aspx/activate?token=(random 生成的代币 id)
下面是 IIS 中的 URL 重写设置:
Web.config 文件:
<rewrite>
<rules>
<rule name="http redirect">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="^OFF$" />
</conditions>
<action type="Rewrite" url="https://{HTTP_HOST}{REQUEST_URI}" logRewrittenUrl="true" />
</rule>
</rules>
</rewrite>
当我输入 URL 时,我看到了 Http404 错误。在这里提一下——我检查了 IIS 中的 'SSL required' 条件。我知道匹配模式看起来不对,但不确定修复方法。有帮助吗?
尝试将 {REQUEST_URI}
更改为 {R:1}
可能会解决此问题。
- {R:x} 用作规则模式 () 的反向引用。
在我的机器上工作。
像这样:
<rule name="HTTPS rewrite" enabled="true" stopProcessing="true">
<match url="(.*)"/>
<conditions>
<add input="{HTTPS}" pattern="^OFF$"/>
</conditions>
<action type="Rewrite" url="https://{HTTP_HOST}{R:1}" logRewrittenUrl="true" />
</rule>
顺便说一下,您提到需要将 HTTP 流量 Redirect
转换为 HTTPS。但是您似乎正在尝试 Rewrite
将 HTTP 流量传输到用作反向代理的 HTTPS。
如果您想配置正确的 301 HTTP 重定向,请使用 Redirect
而不是 Rewrite
。
像这样:
<rule name="HTTPS force" enabled="true" stopProcessing="true">
<match url="(.*)"/>
<conditions>
<add input="{HTTPS}" pattern="^OFF$"/>
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent"/>
</rule>
我遵循了@Anduin 提到的更改。除了这些更改之外,我还为该站点创建了一个端口 80 绑定,该规则运行良好。