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 应用程序。它应该像这样工作:
- http://rest.company.nl:8090/interface.svc/company1/someresource?somequerystring
- ...
- http://rest.company.nl:8090/interface.svc/company9/someresource?somequerystring
应该映射到
- http://rest.company.nl:8090/interface.svc/someresource?somequerystring&company=company1
- ...
- http://rest.company.nl:8090/interface.svc/someresource?somequerystring&company=company9
我在 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}&{C:1}" appendQueryString="false" logRewrittenUrl="true" />
<conditions>
<add input="{QUERY_STRING}" pattern="(.*)" />
</conditions>
</rule>
我有一个关于在 IIS 中 url 重写的问题。这个问题有点像 URL Rewrite rule - subfolder to query string value,但我没能根据自己的需要定制答案。
我们有一个具有以下结构的 REST 接口:
http://rest.company.nl:8090/interface.svc/accountmanager?customer=TEST
现在我们想在 url 中添加一个公司子文件夹并使用 URL 重写以便能够为所有公司使用相同的 rest 应用程序。它应该像这样工作:
- http://rest.company.nl:8090/interface.svc/company1/someresource?somequerystring
- ...
- http://rest.company.nl:8090/interface.svc/company9/someresource?somequerystring
应该映射到
- http://rest.company.nl:8090/interface.svc/someresource?somequerystring&company=company1
- ...
- http://rest.company.nl:8090/interface.svc/someresource?somequerystring&company=company9
我在 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}&{C:1}" appendQueryString="false" logRewrittenUrl="true" />
<conditions>
<add input="{QUERY_STRING}" pattern="(.*)" />
</conditions>
</rule>