iis urlrewrite HTTPS,除了服务(.asmx 和 .svc)或带有参数/值的特定服务

Posted

技术标签:

【中文标题】iis urlrewrite HTTPS,除了服务(.asmx 和 .svc)或带有参数/值的特定服务【英文标题】:iis urlrewrite HTTPS except services (.asmx and .svc) or Specific service with parameters / values 【发布时间】:2020-11-15 04:45:18 【问题描述】:

我希望我的网站使用默认 HTTPS,但服务(*.asmx 和 *.svc)除外,以便在 Http 和 Https 中工作。

一些restful服务是http,因为客户端是jsp开发的,使用http请求,一个客户端是windows,使用和https一样的服务。

我想跳过 *.asmx 和 *.svc 或特定服务,以便任何客户端都可以通过 http 或 https 请求服务。

我正在使用下面的代码:

<rule name="Force HTTPS" stopProcessing="true">
    <match url="(.*)" />
    <conditions logicalGrouping="MatchAll">
       <!-- <add input="HTTPS" pattern="^OFF$" /> -->
        <add input="HTTPS" pattern="off" ignoreCase="true" />
        <add input="REQUEST_URI" negate="true" pattern="^/myservice.svc$" ignoreCase="true" />
        <add input="REQUEST_URI" negate="true" pattern="^/myservice.svc?(.*)" ignoreCase="true" />
        <add input="REQUEST_URI" negate="true" pattern="^/restserv.svc$" ignoreCase="true" />
        <add input="REQUEST_URI" negate="true" pattern="^/restserv.svc/(.*)" ignoreCase="true" />
    </conditions>
    <action type="Redirect" url="https://HTTP_HOST/R:1" appendQueryString="true" redirectType="Permanent" />
</rule>

它们都不起作用:只有 /myservice.svc 在 http 中起作用,但是当用户使用参数 /myservice.svc?wsdl/ myservice.svc/getdata/user-name 将其转发到 https。 restserv.svc 也是如此

如何使用参数跳过 *.svc 或我的特定服务?

【问题讨论】:

【参考方案1】:

你可以试试下面的规则:

<rule name="Https Except Service" stopProcessing="true">
    <match url="(.*)" />
    <conditions logicalGrouping="MatchAll">
        <add input="HTTPS" pattern="off" ignoreCase="true" />
        <add input="REQUEST_URI" negate="true" pattern="^/(myservice\.svc.*)" ignoreCase="true" />
        <add input="REQUEST_URI" negate="true" pattern="^/(restserv\.svc.*)" ignoreCase="true" />
    </conditions>
    <action type="Redirect" url="https://HTTP_HOST/R:1" appendQueryString="true" redirectType="Permanent" />
</rule>

如果您仍然遇到问题,请尝试在 iis 中运行失败的请求跟踪:

Using Failed Request Tracing to Trace Rewrite Rules

【讨论】:

以上是关于iis urlrewrite HTTPS,除了服务(.asmx 和 .svc)或带有参数/值的特定服务的主要内容,如果未能解决你的问题,请参考以下文章

node + express + iis + iisnode + urlrewrite搭建站点

iis url重写模块 是干啥用的

IIS反向代理/Rewrite/https卸载配置

powershell 一个基本的PowerShell脚本,用于将IIS 7应用程序请求路由(tl; dr; UrlRewrite的反向代理功能)推送到多个服务器。

windows2008(64位)下iis7.5中的url伪静态化重写(urlrewrite)

UrlRewriter配置IIS支持伪静态