【问题标题】:Rewriting URL that has 2 question marks in it using Rewriter in Config使用 Config 中的 Rewriter 重写其中包含 2 个问号的 URL
【发布时间】:2011-12-01 20:18:32
【问题描述】:

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

Url 最终是这样的:

default.aspx?tab=123*?*ctlname=Step2

我正在尝试通过重写 URL 来解决这个问题。这似乎应该有效,但没有。

<RewriterRule>
  <LookFor>.*/Default.aspx\?tabid=123(\?ctlname=.*)$</LookFor>
  <SendTo>~/Default.aspx?tabid=123&amp;ctlname=$1</SendTo>
</RewriterRule>

任何帮助将不胜感激!

【问题讨论】:

  • 你不要在 URL 中使用多个问号,你应该用 & 号分隔不同的参数,例如default.aspx?tab=123&amp;ctlname=Step2
  • 不开玩笑。如果我们是编写 URL 的人,我们不会。我们必须处理模块吐出的代码。我们没有编写模块。 :)
  • 呃。这就是我要说的关于这个问题的全部内容。祝你好运! :)
  • 完全同意!我已经要求源代码..我们会看到的。无论如何,谢谢您的帮助。
  • 是时候放弃该模块或开发人员了,因为他们不知道自己在做什么......

标签: .net url-rewriting dotnetnuke config


【解决方案1】:

我已经有一段时间没有使用它了,但Snapsis Pageblaster 可能会有所帮助。 它本质上是缓存,优化你的性能,但它还有另一个很酷的功能,可以在内容发送到客户端浏览器之前搜索/替换内容。所以你可以用它重写规则,如果你不能得到源代码,也许可以清理这些 URL。

如果他们正在使用 ?标记所有 URL 参数,然后我想源代码会很可怕。 ;)

【讨论】:

    【解决方案2】:

    您无法使用 siteUrls.config 重写规则处理未重写的 Url。

    这是因为查询字符串在传递给处理每个正则表达式模式的规则引擎之前已从路径中剥离。

    在 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);
    

    因此,您可以摆弄您发布的正则表达式,直到您睁一只眼闭一只眼为止,但它永远不会起作用。这是因为正则表达式模式是根据 requestedPath 值评估的,该值已经从其中剥离了查询字符串。

    您将需要在 DNN Url Rewriter 上游发生的重写解决方案,或 Url Rewriter 的自定义版本(我不推荐)。像 IIS7 Url Rewrite 这样的东西,它可以在 DNN 甚至看到之前操纵 Url。

    但现在也是向控制代码的人宣传停止使用非法 Url 字符的好时机,如果有可能的话。

    【讨论】:

      猜你喜欢
      • 2012-04-23
      • 1970-01-01
      • 2016-09-28
      • 2012-12-01
      • 2013-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多