如何在 ASP.NET Core 6 中停止 https 和 www 上的双重重定向?
How to stop double redirect on https and www in ASP.NET Core 6?
我在 web.config 中使用 IIS 重写规则来执行我的 HTTPS 和非 www 规范 URI 强制执行,但后来使用 Web 部署变得复杂,所以我切换到 ASP.NET Core 6 中间件。这是我来自 Program.cs:
的代码
app.UseRewriter(new RewriteOptions().AddRedirectToNonWwwPermanent());
app.UseHttpsRedirection();
对于http://example.com and https://www.example.com,效果很好,而且只有一个重定向。
但是,对于 http://www.example.com,它现在实施了非 www 规则,然后是 https 规则,因此您可以将两个 308 重定向链接在一起(对于 IIS,我只有一个重定向)。
你可以在这里测试:https://www.redirect-checker.org/index.php
http://www.magazedia.com
308 Permanent Redirect
http://magazedia.com/
308 Permanent Redirect
https://magazedia.com/
200 OK
这对我的强迫症造成了严重破坏。
是否有简单的修复方法,或者我是否需要编写一个结合两者的自定义重定向?
编辑:
我也刚试过这个,但结果是一样的(双重重定向):
app.UseRewriter(new RewriteOptions().AddRedirectToNonWwwPermanent().AddRedirectToHttpsPermanent() );
// app.UseHttpsRedirection();
据我所知,asp.net核心url重写中间件也支持使用url重写规则xml.
您可以创建一个名为 IISUrlRewrite.xml
的 url reiwte xml,如下所示:
<rewrite>
<rules>
<rule name="Rewrite segment to id querystring" stopProcessing="true">
<match url="^iis-rules-rewrite/(.*)$" />
<action type="Rewrite" url="rewritten?id={R:1}" appendQueryString="false"/>
</rule>
</rules>
</rewrite>
然后修改startup.cs(.net 5)或program.cs(.net 6)
using (StreamReader iisUrlRewriteStreamReader =
File.OpenText("IISUrlRewrite.xml"))
{
var options = new RewriteOptions()
.AddIISUrlRewrite(iisUrlRewriteStreamReader)
app.UseRewriter(options);
}
更多的细节,你可以参考这个article。
我在 web.config 中使用 IIS 重写规则来执行我的 HTTPS 和非 www 规范 URI 强制执行,但后来使用 Web 部署变得复杂,所以我切换到 ASP.NET Core 6 中间件。这是我来自 Program.cs:
的代码app.UseRewriter(new RewriteOptions().AddRedirectToNonWwwPermanent());
app.UseHttpsRedirection();
对于http://example.com and https://www.example.com,效果很好,而且只有一个重定向。
但是,对于 http://www.example.com,它现在实施了非 www 规则,然后是 https 规则,因此您可以将两个 308 重定向链接在一起(对于 IIS,我只有一个重定向)。
你可以在这里测试:https://www.redirect-checker.org/index.php
http://www.magazedia.com
308 Permanent Redirect
http://magazedia.com/
308 Permanent Redirect
https://magazedia.com/
200 OK
这对我的强迫症造成了严重破坏。
是否有简单的修复方法,或者我是否需要编写一个结合两者的自定义重定向?
编辑:
我也刚试过这个,但结果是一样的(双重重定向):
app.UseRewriter(new RewriteOptions().AddRedirectToNonWwwPermanent().AddRedirectToHttpsPermanent() );
// app.UseHttpsRedirection();
据我所知,asp.net核心url重写中间件也支持使用url重写规则xml.
您可以创建一个名为 IISUrlRewrite.xml
的 url reiwte xml,如下所示:
<rewrite>
<rules>
<rule name="Rewrite segment to id querystring" stopProcessing="true">
<match url="^iis-rules-rewrite/(.*)$" />
<action type="Rewrite" url="rewritten?id={R:1}" appendQueryString="false"/>
</rule>
</rules>
</rewrite>
然后修改startup.cs(.net 5)或program.cs(.net 6)
using (StreamReader iisUrlRewriteStreamReader =
File.OpenText("IISUrlRewrite.xml"))
{
var options = new RewriteOptions()
.AddIISUrlRewrite(iisUrlRewriteStreamReader)
app.UseRewriter(options);
}
更多的细节,你可以参考这个article。