.net 使用配置中的“重写器”重写包含2个问号的URL
我不能在我的DotNetNuke站点中使用友好的URL,我想要使用的模块需要它。问题是,当他们发布到模块流程的第二部分时,他们会在下一步中添加“?ctlname=Step2”,然后添加“?ctlname=Step3”。所以 Url最终是这样的:.net 使用配置中的“重写器”重写包含2个问号的URL,.net,url-rewriting,dotnetnuke,config,.net,Url Rewriting,Dotnetnuke,Config,我不能在我的DotNetNuke站点中使用友好的URL,我想要使用的模块需要它。问题是,当他们发布到模块流程的第二部分时,他们会在下一步中添加“?ctlname=Step2”,然后添加“?ctlname=Step3”。所以 Url最终是这样的: string strQueryString = ""; if ((!String.IsNullOrEmpty(app.Request.Url.Query))) { strQueryString = request.QueryString.ToStr
string strQueryString = "";
if ((!String.IsNullOrEmpty(app.Request.Url.Query)))
{
strQueryString = request.QueryString.ToString();
requestedPath = requestedPath.Replace(app.Request.Url.Query, "");
}
默认值.aspx?tab=123*?*ctlname=Step2
我试图通过重写URL来解决这个问题。这似乎应该是可行的,但实际上并非如此
<RewriterRule>
<LookFor>.*/Default.aspx\?tabid=123(\?ctlname=.*)$</LookFor>
<SendTo>~/Default.aspx?tabid=123&ctlname=$1</SendTo>
</RewriterRule>
.*/Default.aspx\?tabid=123(\?ctlname=.*)$
~/Default.aspx?tabid=123&;ctlname=$1
任何帮助都将不胜感激 我用它已经有一段时间了,但可能会有所帮助。 它本质上是缓存、优化性能,但它还有另一个很酷的功能,可以在内容发送到客户端浏览器之前搜索/替换内容。因此,您可以使用它重写规则,如果无法获得源代码,则可以清理这些URL
如果他们正在使用?标记所有URL参数,那么我想源代码将是可怕的。;) 无法使用siteUrls.config重写规则处理未重写的Url 这是因为querystring在传递给处理每个正则表达式模式的规则引擎之前从路径中剥离 在UrlRewriteModule.cs中,您会发现如下代码:
string strQueryString = "";
if ((!String.IsNullOrEmpty(app.Request.Url.Query)))
{
strQueryString = request.QueryString.ToString();
requestedPath = requestedPath.Replace(app.Request.Url.Query, "");
}
然后,再往下看,您会发现:
//check for the existence of the LookFor value
string pattern = "^" + RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, rules[ruleIndex].LookFor) + "$";
Match objMatch = Regex.Match(requestedPath, pattern, RegexOptions.IgnoreCase);
因此,你可以一直摆弄你发布的正则表达式,直到你变得怒目而视,但它永远不会起作用。这是因为regex模式是根据requestedPath
值计算的,该值已经从中剥离了querystring
您将需要一个在DNN Url重写器上游发生的重写解决方案,或者一个自定义版本的Url重写器(我不推荐)。类似IIS7 Url重写的东西,它在DNN看到Url之前就可以对Url进行操作
但是,现在也是一个很好的时机,让控制代码的人停止使用非法的Url字符,如果这是可能的话。如果Url中没有使用多个问号,那么应该用符号和分隔不同的参数,例如
default.aspx?tab=123&ctlname=Step2
别开玩笑了。如果我们是编写URL的人,我们不会。我们必须处理模块发出的代码。我们没有编写模块。:)啊。关于这个问题,我只想说这些。祝你好运!:)完全同意!从那以后,我一直要求提供源代码。。我们拭目以待。无论如何,谢谢你的帮助。是时候抛弃那个模块或开发人员了,因为他们不知道自己在做什么。。。。