小编pat*_*ski的帖子

尝试将HTTP重定向到HTTPS(C#,IIS),但HTTPS在响应头中转回HTTP - 重定向循环

我在同一个IIS服务器上设置了两个IIS网站.网站A包含大部分内容,这是用户在请求我们的地址时显示的内容(例如www.websitea.com).网站B是一个单独的项目,只包含整个内容的一部分,因此它是内部的(在IIS中绑定到websiteb.com),但通过URL重写,用户可以通过键入www.websitea.com/websiteb来访问它.

URL重写在网站A的web.config中如下所示:

<rewrite>
  <rules>
    <clear />
    <rule name="Website B rewrite rule" stopProcessing="true">
      <match url="^websiteb(.*)" />
      <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{CACHE_URL}" pattern="^(https?)://" />
      </conditions>
      <action type="Rewrite" url="{C:1}://websiteb.com{R:1}" />
    </rule>
  </rules>
</rewrite>
Run Code Online (Sandbox Code Playgroud)

{CACHE_URL}和{C:1}位用于保持使用的协议.例如,在HTTP上请求www.websitea.com/websiteb/foo.html的用户在HTTP上被"重写"到websiteb.com/foo.html,并且在HTTPS上对websitea.com/websiteb/bar.html的请求被"重写" "到HTTPS上的websiteb.com/bar.html.

现在,对于某些网站B页面,我们希望用户仅使用HTTPS - 这在我们的SomePageViewModel的ShouldBeHttps属性中设置.因此,在ActionFilterAttribute中使用以下代码:

    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        if (filterContext.HttpContext.Request.IsSecureConnection)
            return;

        var result = filterContext.Result as ViewResult;
        if (result != null)
        {
            if ((result.Model as SomePageViewModel).ShouldBeHttps)
            {
                HandleNonHttpsRequest(filterContext);
            }
        }
    }

    protected virtual void HandleNonHttpsRequest(ActionExecutedContext filterContext)
    {
        if (!string.Equals(filterContext.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase))
            throw new InvalidOperationException("The method must be …
Run Code Online (Sandbox Code Playgroud)

c# iis https redirect url-rewrite-module

9
推荐指数
1
解决办法
636
查看次数

标签 统计

c# ×1

https ×1

iis ×1

redirect ×1

url-rewrite-module ×1