Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 使用配置中的“重写器”重写包含2个问号的URL_.net_Url Rewriting_Dotnetnuke_Config - Fatal编程技术网

.net 使用配置中的“重写器”重写包含2个问号的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

我不能在我的DotNetNuke站点中使用友好的URL,我想要使用的模块需要它。问题是,当他们发布到模块流程的第二部分时,他们会在下一步中添加“?ctlname=Step2”,然后添加“?ctlname=Step3”。所以

Url最终是这样的:

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&amp;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的人,我们不会。我们必须处理模块发出的代码。我们没有编写模块。:)啊。关于这个问题,我只想说这些。祝你好运!:)完全同意!从那以后,我一直要求提供源代码。。我们拭目以待。无论如何,谢谢你的帮助。是时候抛弃那个模块或开发人员了,因为他们不知道自己在做什么。。。。