【问题标题】:URL Rewrite rule - subfolder to query string value (Part 2)URL 重写规则 - 查询字符串值的子文件夹(第 2 部分)
【发布时间】:2020-03-16 15:56:56
【问题描述】:

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

我们有一个具有这种结构的 REST 接口:

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

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

应该映射到

我在 IIS 站点中编写了以下规则(Append Query StringLog rewritten 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,并且没有任何日志可以说明问题。

感谢您的宝贵时间!

【问题讨论】:

    标签: rest iis url-rewriting url-rewrite-module


    【解决方案1】:

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

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

    <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>
    

    【讨论】:

    • 嗨 Jalpa,我不得不修改你的规则中的一行: 除此之外,它就像一个魅力。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-24
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-13
    相关资源
    最近更新 更多