URL 重写规则 - 查询字符串值的子文件夹(第 2 部分)

URL Rewrite rule - subfolder to query string value (Part 2)

我有一个关于在 IIS 中 url 重写的问题。这个问题有点像 URL Rewrite rule - subfolder to query string value,但我没能根据自己的需要定制答案。

我们有一个具有以下结构的 REST 接口:

http://rest.company.nl:8090/interface.svc/accountmanager?customer=TEST

现在我们想在 url 中添加一个公司子文件夹并使用 URL 重写以便能够为所有公司使用相同的 rest 应用程序。它应该像这样工作:

应该映射到

我在 IIS 站点中编写了以下规则(附加查询字符串日志重写 URL 均已选中) :

<rule name="Company specific REST" patternSyntax="Wildcard" stopProcessing="true">
    <match url="*/interface.svc/*" />
    <action type="Rewrite" url="http://rest.company.nl:8090/interface.svc/{R:2}?company={R:1}" logRewrittenUrl="true" />
    <conditions>
    </conditions>
</rule>

https://docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/url-rewrite-module-configuration-reference 我了解到规则中的匹配项将与url 的路径进行比较。现在我的路径包含一个文件 (interface.svc) 而不是一个文件夹。这会导致问题吗?

当我输入公司特定 URL 时得到的响应是 404,并且没有任何日志可以说明一些问题。

感谢您的宝贵时间!

您的规则正则表达式存在一些问题。

您可以尝试使用以下规则:

<rule name="Company specific REST" patternSyntax="ECMAScript" stopProcessing="true">
    <match url="interface.svc/(.*)/(.*)" />
    <action type="Rewrite" url="http://rest.company.nl:8090/interface.svc/{R:2}?company={R:1}&amp;{C:1}" appendQueryString="false" logRewrittenUrl="true" />
    <conditions>
           <add input="{QUERY_STRING}" pattern="(.*)" />
    </conditions>
</rule>