使用Url路径段的IIS重写规则

使用Url路径段的IIS重写规则,iis,url-rewriting,Iis,Url Rewriting,我希望能为一些正在移动到不同结构的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

我希望能为一些正在移动到不同结构的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
需要重定向到(分别):

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

也许可以做一些类似的事情

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

谢谢

我发现了它的工作原理

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。我可以安全地忽略第二个参数

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

建议使用([^/])+而不是(.*)。 如果URL中有多个斜杠,则捕获组将损坏

例如:

致以最良好的祝愿


萨姆

那很有趣。在测试期间,我确实发现了一些问题,但当我找到解决方案时,它确实正常工作。我将根据你的建议进行一些测试。谢谢@samwu事实上,在进一步检查后,您尝试匹配的URL不是我想要识别的URL,如果您将我的模式用于我的目标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>