首页 > 解决方案 > iis urlrewrite HTTPS,除了服务(.asmx 和 .svc)或带有参数/值的特定服务

问题描述

我希望我的网站默认使用 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 或我的特定服务?

标签: iisurl-rewritingurl-rewrite-module

解决方案


您可以尝试以下规则:

<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 中运行失败的请求跟踪:

使用失败的请求跟踪来跟踪重写规则


推荐阅读