IIS URL重写无法正常运行404错误

时间:2017-12-21 05:04:40

标签: regex iis url-rewriting pattern-matching

我正在升级IIS 10上的joomla网站设置。现在我有oldsite.com和newsite.com。我的新网站文件夹结构略有不同,但页面名称和内容相同。正确,因此客户不希望丢失旧页面上的SEO排名,并希望将它们重定向到新升级网站上的更正。

我需要做以下

  • 是通配符,将替换为其中的URL中输入的内容

    / div-services / *将重定向到/ div / *

    / div-questions / *将重定向到/ div / questions / *

    / fm-lw-services / *将重定向到/ fm-lw / *

    / locations / *将重定向到/ contact / *

    / resources / blog / *将重定向到/ blog / *

    / contact-us / *将重定向到/ contact / *

我最初将我的模式设置为

(.*)(div-services)(.*) becomes {R:1}( div){R:1}

它很有效,直到我在网址中以某种形式重复匹配短语。在这种情况下,“div-services”再次出现在URL中,它也会被替换。

例如,如果网址是newsite.com/div-services/xyz/abc-div-services,那么根据规则,它将替换两个不希望出现的“div-services”,我只需要替换第一个发生。我虽然这是一个简单的修复,并使我的模式如下

(.*)(/div-services/)(.*) replace to {R:1}(/div/){R:1}

即使在测试模式中它验证成功但它不起作用并且不会重写我甚至尝试使用转义字符的URL

(.*)(\/div-services\/)(.*) becomes {R:1}(/div/){R:1}

仍然没有运气。在挖掘和挖掘之后,我发现了以下示例

div-services/(.*)$ becomes div/{R:1}

这种方法效果很好,但现在如果我没有结束正斜杠就行了

例如,如果URL是newsite.com/div-services,它将不起作用,但是newsite.com/div-services/并且newsite.com/div-services/xyx将正常工作。

我只是在茫然,任何帮助将不胜感激。我只是不明白为什么我不能检测到正斜杠/

1 个答案:

答案 0 :(得分:0)

fyi我想到为什么这不起作用(.*)(/div-services/)(.*) becomes {R:1}(/div/){R:1}

这是因为输入在第一个正斜杠之后开始,我假设它将是整个URL,这就是我的正则表达式验证但实际上不起作用的原因。当它运行时,它只在第一个斜杠之后获取URL,这澄清了许多事情和逻辑解释,为什么我的许多模式都没有工作,即使它们会通过模式测试。希望它可以节省其他人浪费的时间和工作时间,因为我没有清楚地了解它是如何工作的

enter image description here