【问题标题】:Umbraco https rewrite rule causes an infinite loopUmbraco https 重写规则导致无限循环
【发布时间】:2015-02-21 03:20:57
【问题描述】:

我有以下重写规则,在 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 的路由并导致了无限循环。我们缺少什么?

【问题讨论】:

  • 您使用的是哪个版本的 Umbraco?
  • 嗨 PTuckey,现在是 7.1.4

标签: iis-7 rewrite umbraco


【解决方案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>

【讨论】:

  • 我看到你在另一个帖子中回答了这个问题,我实际上已经尝试过这个,但这不起作用。同样,重写规则已经在常规的 asp.net 网站中有效,但不适用于 Umbraco 网站。
  • 我奖励了这个答案,因为这最接近我需要的解决方案。我对此进行了测试,并在我的问题中进行了重写,并且都在全新安装的 Umbraco 上工作。但是,我的问题仍然存在。
  • 如果您需要更多帮助,您应该让我知道什么“不起作用” :) Umbraco 自己没有其他重定向,我成功地使用了这个重写规则。我认为它要求您不要在 urlRewriting.config 中进行任何重写,这应该是您的 web.config 文件中的第一个重写规则(因为它在那之后停止处理)。 our.umbraco.org 是一个更好的讨论场所。
  • 除了您建议的那个之外,两个配置文件都没有重写。现在我怀疑我们安装的插件之一会导致无限循环。我正在慢慢重建网站。我会去那里。再次感谢。
【解决方案2】:

由于您的 url 正则表达式没有过滤输入 (&lt;match url="(.*)" /&gt;),您应该在代码中使用 redirectType="Permanent" 参数:

更多信息可以在这里找到:
Add an Url Rewrite rule

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

【讨论】:

  • 我在发布我的问题之前尝试了不同的重定向类型,但它没有帮助。同样,重写规则已经在常规的 asp.net 网站中有效,但不适用于 Umbraco 网站。所以重写规则一定是正确的吧?所以必须在 Umbraco 中进行配置?
【解决方案3】:

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

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

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

此规则应放在&lt;rewrites&gt; 部分中。

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

【讨论】:

  • 不幸的是 urlRewriting.net 模块非常陈旧而且非常糟糕。我们只保留它,因为有些人无法安装 IIS 重写插件。如果可能的话,我总是建议使用 IIS。
  • @sebastiaan 我不知道 - 我会更新我的答案。谢谢。
【解决方案4】:

我还遇到了 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 推荐后者的原因?

如果问题仍然存在,我会向您报告。希望更新的规则能解决这个问题。

【讨论】:

    猜你喜欢
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 2019-09-16
    • 2013-12-12
    • 2011-03-08
    • 1970-01-01
    • 2021-12-06
    相关资源
    最近更新 更多