Umbraco https重写规则会导致无限循环

时间:2014-12-23 00:46:54

标签: iis-7 rewrite umbraco

我有以下重写规则,可以在IIS7上运行的常规asp.net项目上完美运行。

<rule name="HTTP to HTTPS redirect" stopProcessing="true">
  <match url="(.*)" />
    <conditions>
        <add input="{HTTPS}" pattern="off" ignoreCase="true" />
    </conditions>
  <action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" />
</rule>

因此,在 http ://{domain}/aboutus访问时,我们的某个网页会重定向到 https ://{domain}/aboutus。现在在Umbraco站点中放置相同的重写规则会导致无限循环。我们的Umbraco网站没有任何其他重写规则。这让我觉得Umbraco有点劫持从http到https的路由并导致无限循环。我们缺少什么?

4 个答案:

答案 0 :(得分:2)

由于你的url正则表达不过滤输入(<match url="(.*)" />),你应该在代码中使用redirectType="Permanent"参数:

更多信息可在此处找到:
Add an Url Rewrite rule

  
    

值得注意的是,默认情况下,重定向是302重定向,如果要重新定向301,则需要添加以下内容:
         redirectMode="Permanent"
    您可以在其网站上找到URL重写组件的完整说明:     https://github.com/aspnetde/UrlRewritingNet

  

答案 1 :(得分:1)

我建议改用以下规则:

<rule name="Redirect to https" stopProcessing="true">
    <match url="(.*)" />
    <conditions>
        <add input="{HTTPS}" pattern="off" ignoreCase="true" />
    </conditions>
    <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" 
            redirectType="Permanent" appendQueryString="false" />
</rule>

答案 2 :(得分:1)

一个可能的解决方案是使用Umbraco重写模块而不是IIS重写。

在URL重写配置文件(Config/UrlRewriting.config)中,以下规则是如何从HTTP重定向到HTTPS的简单示例:

<add name="https Rewrite"
    redirect="Domain"
    redirectMode="Permanent"
    virtualUrl="http://(.*)"
    destinationUrl="https://$1"
    ignoreCase="true" />

此规则应放在<rewrites>部分内。

编辑:根据sebastiaan的评论,urlRewriting.net模块已过时,应尽可能使用IIS解决方案。

答案 3 :(得分:0)

我也遇到过使用Umbraco 6.2.4的无限重定向循环问题。它每周左右发生一次。我的网站都是SSL,UmbracoUseSSL = false。

我的HTTP到HTTPS规则如下:

<rule name="Redirect to https" stopProcessing="true">
<match url="(.*)" />
<conditions>
    <add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent"  />

我根据@sebastiaan更新了以下内容

<rule name="Redirect to https" stopProcessing="true">
<match url="(.*)" />
<conditions>
    <add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" 
        redirectType="Permanent" appendQueryString="false" />

听起来好像R:1可以包含一个空字符串,它有可能导致循环。 {REQUEST_URI}将始终至少包含斜杠。不确定这是不是@sebastiaan推荐后者的原因?

如果问题仍然存在,我会报告回来。希望更新的规则将解决问题。