【问题标题】:IIS URL Rewrite rule - test works but no resultsIIS URL 重写规则 - 测试有效但没有结果
【发布时间】: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


    【解决方案1】:

    就其格式而言,将规则放置在树中是问题所在。由于它不是放在根目录下,而是放在 /application 中,所以一旦我摆脱了第一部分,因此匹配 url 的开头是 application,它就开始工作了。

    【讨论】:

    • 你能分享一下你用的什么吗?
    猜你喜欢
    • 2012-02-04
    • 2016-07-05
    • 2014-10-27
    • 1970-01-01
    • 1970-01-01
    • 2014-05-01
    • 2011-04-21
    相关资源
    最近更新 更多