3

我有一个项目,我们正在为客户重建一个站点,新站点在.net 平台上使用 umbraco。旧址是冷聚变。

Umbraco 使用 urlrewriting.net 库,因此我为旧的冷融合 url 创建了所有 301 recirect 规则,但这会导致无限循环。

    <add name="r66" virtualUrl="^~/thing_info/index.cfm.D413249D-BCD8-304B-02CD-561DAC70641E$"
                destinationUrl="~/about-us/award-winning-product" redirect="Application" redirectMode="Permanent" ignoreCase="true" />

我知道 ”。” 有一个特殊的含义,但效果很好,我也用过“。” 匹配任何字符,包括“?” 以查询字符串开头的字符。如果我访问没有像这样的查询字符串尝试 url

http://staging.site/thing_info/index.cfm-D413249D-BCD8-304B-02CD-561DAC70641E

然后我被正确重定向到

http://staging.site/about-us/award-winning-product

但是,如果我尝试 url(问号是唯一的区别)

http://staging.site/thing_info/index.cfm?D413249D-BCD8-304B-02CD-561DAC70641E

然后我最终进入到自身的重定向循环。(我检查了响应头)

有谁知道我做错了什么或者是 urlrewriting.net 库中的错误?或如何纠正问题?

4

3 回答 3

5

默认情况下 UrlRewritingNet 不会在模式匹配中包含查询字符串。要启用此功能,您需要添加以下属性rewriteUrlParameter="IncludeQueryStringForRewrite"

<add name="r66" virtualUrl="^~/thing_info/index.cfm.D413249D-BCD8-304B-02CD-561DAC70641E$"
     destinationUrl="~/about-us/award-winning-product" redirect="Application" redirectMode="Permanent" 
     ignoreCase="true" rewriteUrlParameter="IncludeQueryStringForRewrite" />

试试这个,让我知道它是否有效。

乔纳森

于 2011-03-20T14:47:15.553 回答
2

在尝试使用 umbraco 和 UrlRewritingNet 进行永久 301 重定向时,我遇到了同样的问题。

在阅读了这篇文章和一些头发拉后,我得到了它与 umbraco/config/urlrewriting.config 中的以下条目一起工作

<add name="Rule1885"
      virtualUrl="^~/whats-on/event\.aspx\?id=1885"
      destinationUrl="~/whats-on/event.aspx?id=1822"
      rewriteUrlParameter="IncludeQueryStringForRewrite"
      redirectMode="Permanent"
      redirect="Application"   
      ignoreCase="true" />

这是乔纳森的答案的组合,添加rewriteUrlParameter="IncludeQueryStringForRewrite",并正确转义 virtualUrl 参数,将其排序。

于 2011-09-14T00:14:25.060 回答
2

它是一个正则表达式,所以 . 表示任何字符。您可以尝试使用 . 转义点。或带有\的问题?专门匹配该字符。

于 2010-02-18T16:56:02.530 回答