【问题标题】:URL rewriting breaks with question markURL 重写中断带问号
【发布时间】:2013-07-03 13:34:17
【问题描述】:

我想像这样重写 url(DotNetNuke Friendly URLs):

发件人:/search.aspx?query=test 收件人:~/SearchResults?search=test

我尝试了各种组合,但似乎没有考虑到问号后面的网址部分

  <RewriterRule>
      <LookFor>.*/search.aspx?query=(.+)</LookFor>
      <SendTo>~/SearchResults?Search=$1</SendTo>
  </RewriterRule>

但它不起作用..

我试过了:

  <RewriterRule>
      <LookFor>.*/search.aspx\?query=(.+)</LookFor>
      <SendTo>~/SearchResults?Search=$1</SendTo>
  </RewriterRule>

但这也不适用于 url /search.aspx?query=test 。我得到了 search.aspx 的 404

这是 DotNetNuke 的 web.config 中的相关部分:

<friendlyUrl defaultProvider="DNNFriendlyUrl">
  <providers>
    <clear />
    <add name="DNNFriendlyUrl"
         type="DotNetNuke.Services.Url.FriendlyUrl.DNNFriendlyUrlProvider, DotNetNuke.HttpModules" 
         includePageName="true" 
         regexMatch="[^a-zA-Z0-9 _-]" 
         urlFormat="humanfriendly" />
  </providers>
</friendlyUrl>

是否有什么导致它跳过?

如果有帮助的话,这是友好 url 重写器的源代码。我对正则表达式不是很好,所以我可以使用一些帮助。

https://dotnetnuke.codeplex.com/SourceControl/latest#Trunk/Content/Community/HttpModules/UrlRewrite/UrlRewriteModule.cs

【问题讨论】:

  • 也许这个链接有帮助:stackoverflow.com/questions/7083316/….
  • 添加了另一个 url 重写器。我希望在不启用 IIS url 重写器的情况下解决这个问题。因为具有 DNN 的那个可以由管理员修改..
  • 我不擅长正则表达式。你认为它是由于 web.config 中的 regexMatch="[^a-zA-Z0-9 _-]" 而跳过吗?我尝试添加'?和 '\?'但随后我在整个网站上收到 500 错误

标签: asp.net regex url-rewriting dotnetnuke


【解决方案1】:
.*/search.aspx\?query=(.+)

你必须逃避?用 \ 因为它是一个正则表达式关键字

【讨论】:

  • 不适合我 :( '.*/search.aspx\?query=(.+)~/SearchResults?Search=$2 '
  • @DanielGimenez 你确定吗?您是否使用 DNN 站点对其进行了测试?
  • @VaibhavGarg:不,我用自己的网站和 IIS url 重写模块进行了测试。
【解决方案2】:

问号需要用“\?”转义

    <RewriterRule>
      <LookFor>.*/search.aspx\?query=(.+)$</LookFor>
      <SendTo>~/SearchResults?Search=$1</SendTo>
    </RewriterRule>

【讨论】:

    猜你喜欢
    • 2013-09-03
    • 2021-08-21
    • 1970-01-01
    • 2013-07-26
    • 1970-01-01
    • 2012-04-23
    • 1970-01-01
    • 1970-01-01
    • 2014-01-02
    相关资源
    最近更新 更多