【发布时间】:2017-02-22 07:57:51
【问题描述】:
我在为 IIS 8.5 编写 URL 重写规则时遇到问题。我在编写规则方面的专业知识勉强处于中等水平,文档也没有帮助。
我正在尝试重定向以下 URL:
hostname.com/sub1/sub2/sub3/sub4
到这个网址:
hostname.com/sub1/sub6/sub7/sub2/sub4
我的意思是——
- hostname.com 是一个变量。此单个 .NET 应用程序提供多个主机名。
- sub1 保持不变并且不是变量。
- sub2 是应该触发模式的 sub,而不是 一个变量,但是它被移动到 URL 中的不同位置。
- 鉴于前两点,我假设字符串“sub1/sub2” 应该硬编码到模式中以识别要访问的 URL 转换并避免重定向循环。
- sub3 被删除。
- sub4 是一个变量。
- sub6 和 sub7 不是变量。
我知道我错误地使用了术语变量 - 我所说的变量是指 URL 的那些部分发生了变化,需要被捕获并用作反向引用。
让我用一个例子来澄清一下:
https://hostname.com/application/catalog/v3g5h6j8k9/feline-footwear
到->
https://hostname.com/application/showcase/default/catalog/feline-footwear
我编写规则的所有尝试都失败了。我确定我做错了。
我以为我已经接近了。模式测试全部成功,但它不会获取传入的 URL。我只是得到一个 404:
<rule name=“Catalog redir” enabled=“true” stopProcessing="true">
<match url=“^(.*)/application/catalog/(.*)/(.*)” />
<action type="Redirect" url=“{R:1}/application/showcase/default/catalog/{R:3}” redirectType="SeeOther" />
</rule>
我也尝试过使用 ([a-zA-Z0-9_+-]+) 代替 (.*)
另外,我将此规则安装在树的 /application 级别,而不是根目录。这可能不正确吗?或者更好地提出,规则在网站树中的位置与模式有何关联?我在文档中也找不到。
提前感谢您的任何建议。
【问题讨论】:
标签: regex iis url-rewriting url-rewrite-module iis-8.5