【问题标题】:Url Rewrite weird url matching behaviourUrl Rewrite 奇怪的 url 匹配行为
【发布时间】:2015-09-09 01:29:45
【问题描述】:

好的,所以我最近一直在使用 IIS Url Rewrite,发现它很棒,但是我遇到了一些令人困惑的行为。

首先让我告诉你我想要完成什么:

/{word1}/{id}-{word2}

301 to

/{newWord1}/{id}-{word2}

现在让我告诉你我第一次尝试的规则:

        <rule name="Hub Page Redirect" stopProcessing="true">
            <match url="/service/([0-9]+)\-([^/]+/?)$" />
            <action type="Redirect" url="/hubs/{R:1}-{R:2}" />
        </rule>

如您所见,我只匹配 URL 的特定结构,然后使用匹配中的一些捕获组重定向到自定义 url。这仅适用于以下结构(示例如下):

/service/1460-berkshire

在末尾添加斜线时不起作用?但是,当我将规则更改为以下内容时:

        <rule name="Hub Page Redirect" stopProcessing="true">
            <match url=".*" />
            <conditions>
                <add input="{URL}" pattern="/service/([0-9]+)\-([^/]+/?)$" />
            </conditions>
            <action type="Redirect" url="/hubs/{C:1}-{C:2}" />
        </rule>

一切正常吗?我所做的只是匹配我匹配的任何特定 url,然后通过条件匹配。条件模式与我最初用于匹配 URL 的模式相同。

为什么我的第一条规则没有完全奏效?

【问题讨论】:

    标签: .net regex iis rewrite iis-8


    【解决方案1】:

    确实,{URL} 和匹配 URL 之间存在一些不一致。
    它失败的原因是当您请求“根 URI”时,匹配 URL 属性中的前导斜杠“/”不包括在内,因此例如您对 /service/1460-berkshire 的请求发送RequestURL="service/1460-berkshire",因此由于正则表达式中的前导“/”不匹配。如果您总是希望它成为根本,那么最好的规则(性能和清晰度)将是:

    <rule name="Hub Page Redirect" stopProcessing="true">
        <match url="^service/([0-9]+)\-([^/]+/?)$" />
        <action type="Redirect" url="/hubs/{R:1}-{R:2}" />
    </rule>
    

    您在根目录指定的方式,并且将更快地匹配该 URL。

    在您的第二条规则中,它通过 ExpandedInput="/service/1460-berkshire" 所以条件实际上匹配它。

    我对人们的建议是使用 Failed Request Tracing 来查看 URL 重写规则匹配与否的原因,它是确切了解其工作与否并消除大部分猜测工作的最佳来源。

    见:http://www.iis.net/learn/extensions/url-rewrite-module/using-failed-request-tracing-to-trace-rewrite-rules

    【讨论】:

    • 您好,感谢您的回复,这非常有帮助!但是我认为有些混乱。当我提到我的第一条规则只有在没有斜线的情况下才有效时,我并不是指领先的规则,而是指尾随的规则。该规则适用于“/service/1460-berkshire”,但不适用于“/service/1460-berkshire/”。你知道为什么会这样吗?
    • 你确定之前没有其他规则吗?在我的机器上,我可以看到该 URL 工作正常,但我共享的规则是我目前拥有的唯一规则。我会像文章中那样启用失败的请求跟踪,看看为什么可能不匹配。这可能是之前使用 stopProcessing=true 的另一条规则,它甚至无法运行。
    • Ill enable Failed Request Trace 看看我能不能找到任何东西谢谢你的帮助
    猜你喜欢
    • 2021-06-27
    • 2012-03-05
    • 1970-01-01
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多