我有一个项目,我们正在为客户重建网站,新网站在.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库中是否有错误?或者如何解决问题?
答案 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参数,将其整理出来。