我有以下重写规则,可以在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的路由并导致无限循环。我们缺少什么?
答案 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推荐后者的原因?
如果问题仍然存在,我会报告回来。希望更新的规则将解决问题。