Asp.net 复杂重定向:HTTP到本地主机上的HTTPS+端口,裸域到www,本地主机上除外

Asp.net 复杂重定向:HTTP到本地主机上的HTTPS+端口,裸域到www,本地主机上除外,asp.net,iis,azure,web-config,rewrite,Asp.net,Iis,Azure,Web Config,Rewrite,我正在开发一个ASP.NET网站,该网站位于Microsoft Azure网站上,由三个不同的地址组提供服务,始终通过HTTPS: https://www.example.com/ 和https://www.example.co.uk/,第二级和第三级域的www子域 https://example.azurewebsites.net/,azurewebsites.net的子域,不含www https://localhost:44300/,本地主机,不带www,来自自定义端口。 在我看来,我正在尝

我正在开发一个ASP.NET网站,该网站位于Microsoft Azure网站上,由三个不同的地址组提供服务,始终通过HTTPS:

https://www.example.com/ 和https://www.example.co.uk/,第二级和第三级域的www子域 https://example.azurewebsites.net/,azurewebsites.net的子域,不含www https://localhost:44300/,本地主机,不带www,来自自定义端口。 在我看来,我正在尝试进行两个单独的重定向:

从站点的HTTP版本到HTTPS版本,如果需要,为localhost添加正确的端口号44300。 从域的裸版到www子域,除非在本地主机上。 但是,如果可能,我只想将用户重定向一次,例如直接从´´重定向到´´

我正试图让IIS使用Web.config执行此操作,以便在不必要时不启动ASP.NET。到目前为止,我已经编写了一个IIS重写模块规则,如果我可以用正确的主机和端口www.example.com、localhost:44300等替换{CANOICAL_HOST}变量,该规则就可以工作:

我可以让Azure网站在Web.config的appSettings部分插入一个字符串,比如{CANOICAL_HOST}的适当值,并可以使用XML转换将Web.config中元素的属性更改为静态字符串,但实际上找不到任何方法正确填写这些变量


我只是想用简单的工具重写模块做太多的事情吗?我是否应该放弃并从ASP.NET中的应用程序_BeginRequest中执行此操作?还是有办法让这个解决方案有效?

我制作了一个ASP.NET/C解决方案。基本上:

private void Application_BeginRequest()
{
    var canonicalAuthority = WebConfigurationManager.AppSettings.Get("CanonicalAuthority")
                                 ?? this.Request.Url.Authority;
    // TODO: Might not work with International Domain Names.
    if (!Request.IsSecureConnection
        || !this.Request.Url.Authority.Equals(canonicalAuthority, StringComparison.OrdinalIgnoreCase))
    {
        string path = "https://" + canonicalAuthority + this.Request.Url.PathAndQuery;
        this.Response.RedirectPermanent(path, false);
        this.CompleteRequest();
    }
}
注意待办事项:我认为国际域名的URL编码可能存在问题,但可能通过使用Uri.Compare来解决