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 绑定,该规则运行良好。