urlrewritING.net查询虚拟URL中的字符导致重定向循环

时间:2010-01-13 02:22:01

标签: query-string umbraco url-rewriting urlrewriting.net redirect-loop

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

Umbraco利用urlrewriting.net库,因此我为旧的冷融合网址创建了所有301重定向规则,但是这个规则导致无限循环。

    <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" />

我知道“。”有一个特殊的意义,但它运作良好,我也用过“。”匹配包括“?”在内的任何角色开始查询字符串的字符。 如果我访问尝试没有像这样的查询字符串的网址

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

然后我被正确地重定向到

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

但是,如果我尝试使用网址(问号是唯一的区别)

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

然后我最终进入了一个重定向循环。 (我检查了响应标题)

有没有人知道我做错了什么或者urlrewriting.net库中是否有错误?或者如何解决问题?

3 个答案:

答案 0 :(得分: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" />

尝试一下,让我知道它是否有效。

乔纳森

答案 1 :(得分:2)

这是一个正则表达式。意味着任何角色。你可以试着逃避点。或者问题与\?专门匹配那个角色。

答案 2 :(得分: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" />

这是Jonathan的答案的组合,添加 rewriteUrlParameter =“IncludeQueryStringForRewrite”,并正确地转义virtualUrl参数,将其整理出来。