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搭建站点
powershell 一个基本的PowerShell脚本,用于将IIS 7应用程序请求路由(tl; dr; UrlRewrite的反向代理功能)推送到多个服务器。