Azure Web App HTTP/HTTPS 重写规则

Posted

技术标签:

【中文标题】Azure Web App HTTP/HTTPS 重写规则【英文标题】:Azure Web App HTTP/HTTPS rewrite rules 【发布时间】:2016-12-29 08:05:44 【问题描述】:

我有一个托管在 Microsoft Azure 网站上的 Angular 应用程序。我已通过为我安装扩展程序将所有请求自动重定向到 HTTPS 进行设置:https://github.com/gregjhogan/redirect-http-to-https-site-extension

扩展应用的作用是添加一个如下所示的 applicationhost.xdt 文件:

<?xml version="1.0" ?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <location path="%XDT_SITENAME%" xdt:Transform="InsertIfMissing" xdt:Locator="Match(path)">
    <system.webServer xdt:Transform="InsertIfMissing">
      <rewrite xdt:Transform="InsertIfMissing">
        <rules xdt:Transform="InsertIfMissing" lockElements="clear">
          <rule name="redirect HTTP to HTTPS" enabled="true" stopProcessing="true" lockItem="true">
            <match url="(.*)" />
            <conditions>
              <add input="HTTPS" pattern="off" ignoreCase="true" />
              <add input="WARMUP_REQUEST" pattern="1" negate="true" />
            </conditions>
            <action type="Redirect" url="https://HTTP_HOST/R:1" appendQueryString="true" redirectType="Permanent" />
          </rule>
        </rules>
      </rewrite>
    </system.webServer>
  </location>
</configuration>

现在一切正常,一切都被重定向到 HTTPS。现在我遇到了一个新要求,我想将重写规则编辑为以下内容:将所有请求重定向到 HTTPS(就像现在一样),但包含以下内容的任何 url 除外:“/#/user/[Some随机用户ID]”。

我已经阅读了不同的帖子,并尝试了一些不同的东西,但是 IIS 设置和类似的东西并不是我的领域,我正在努力寻找它。我觉得很接近的尝试是当我添加这个 REQUEST_URI 条件时:

<conditions>
  <add input="HTTPS" pattern="off" ignoreCase="true" />
  <add input="REQUEST_URI" negate="true" pattern=".*/#/user/.+" ignoreCase="true" />
  <add input="WARMUP_REQUEST" pattern="1" negate="true" />
</conditions>

我已尝试重新启动 Azure Web 应用程序并重新部署它,但它似乎没有启动,一切仍然重定向到 HTTPS,因为原始规则适用。

【问题讨论】:

【参考方案1】:

我在网上测试你的正则表达式,看来你需要转义正斜杠:

\/#\/user\/.+

测试字符串:

http://localhost/#/user/123

经过测试的正则表达式:

\/#\/user\/.+

网站: http://www.regextester.com/

【讨论】:

感谢您的回复,但不幸的是它没有工作..我在调试它时遇到了麻烦。知道如何调试吗? 调试正则表达式?通过这个 regextester.com 没有帮助吗? 是的,这很有帮助。我的意思是当我可以说正则表达式是正确的,但我仍然没有得到我想要的重定向。如何调试服务器上的实际重定向?这甚至可能吗? 您可以使用诸如 Selenium 或 Coded UI 之类的 UI 自动化框架来自动化您的测试。我认为这是更简单的方法。此外,您可以在 IIS 上使用 URL 重写模块并通过它进行测试。 iis.net/learn/extensions/url-rewrite-module/…【参考方案2】:

尝试将此添加到您的 Application_beginrequest 事件中

if (!HttpContext.Current.Request.IsSecureConnection && !HttpContext.Current.Request.Url.Host.Contains("/#/user/[Some random user id]"))
        
            Response.Redirect("https://" + Request.ServerVariables["HTTP_HOST"]
                                         + HttpContext.Current.Request.RawUrl);
        

【讨论】:

以上是关于Azure Web App HTTP/HTTPS 重写规则的主要内容,如果未能解决你的问题,请参考以下文章

将 Azure Web 应用程序移入新的 Azure 应用程序服务计划?

Windows Azure Web Site (15) 基于Azure Web App的企业官网改造

Azure Web App Socket Number 有啥限制?

一键将Web应用发布到云-Azure Web App

如何发布Azure web app

如何发布Azure web app