【问题标题】:IIS Rewrite Rule using Url Path segments使用 URL 路径段的 IIS 重写规则
【发布时间】:2020-04-21 17:30:41
【问题描述】:

我正在尝试为正在移动到不同结构的多个 URL 编写一个单独的重写规则。所有 URL 的结构都非常相似,所以我认为必须有一种方法可以为所有 URL 编写一个规则。

例子:

http://example.com/some/deep/path/a/001/my-a-data
http://example.com/some/deep/path/a/002/my-a-data2
http://example.com/some/deep/path/b/001/my-b-data
http://example.com/some/deep/path/b/002/my-b-data2
http://example.com/some/deep/path/c/001/my-c-data
http://example.com/some/deep/path/c/002/my-c-data2

需要重定向到(分别):

http://example.com/a/my-a-data
http://example.com/a/my-a-data2
http://example.com/b/my-b-data
http://example.com/b/my-b-data2
http://example.com/c/my-c-data
http://example.com/c/my-c-data2

所以我想知道的是,是否有一种方法可以读取 URL 中的 PATH 段,以便我可以重用它们来构建最终 URL,因为它就在那里。它只是 URL 的简化。

也许做一些类似的事情

                  /{1}/{2}/{3}/{4}/{5}/{6}
http://example.com/some/deep/path/a/001/my-a-data  ->  http://example.com/{4}/{6}

这可能吗?

谢谢!!!

【问题讨论】:

    标签: iis url-rewriting


    【解决方案1】:

    建议使用 ([^/])+ 代替 (.*) 。 如果您的 URL 中有多个斜杠,则捕获组将被损坏。

    例如:

    最好的问候,

    山姆

    【讨论】:

    • 这很有趣。在我的测试中,我确实发现了一些问题,但是当我找到我的解决方案时,它确实可以正常工作。我会根据你的建议进行一些测试。谢谢@samwu
    • 实际上,经过进一步审查,您尝试匹配的 URL 不是我要识别的 URL,如果您将我的模式与我的目标 URL 一起使用,您会看到参数确实有效.
    【解决方案2】:

    我发现了它的工作原理。

    URL 路径中的每个段都可以用重写规则中的 {R} 参数来标识。为了匹配我的 URL 结构,我创建了以下规则:

    <rule name="Documents redirection" stopProcessing="true">
      <match url="^some/deep/path/(.*)/(.*)/(.*)$" ignoreCase="true" />
      <action type="Redirect" url="/{R:1}/{R:3}" redirectType="Permanent" />
    </rule>
    

    每个 (.*) 段都是 IIS 重写模块识别为 {R} 参数的内容,因此根据我的需要,我需要第一个和第三个参数来形成一个新的 URL。我可以放心地忽略第二个参数。

    我希望这对其他人有帮助。

    【讨论】:

      猜你喜欢
      • 2015-08-26
      • 2015-08-17
      • 2020-09-30
      • 2014-10-27
      • 2014-05-01
      • 2014-06-27
      • 2020-02-17
      相关资源
      最近更新 更多