URL重写打破了问号

时间:2013-07-03 04:42:55

标签: asp.net regex url-rewriting dotnetnuke

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

发件人:/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>

但这也不适用于网址/search.aspx?query=test。我得到了一个404 for search.aspx

这是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>

是否有某些因素导致其跳过?

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

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

2 个答案:

答案 0 :(得分:3)

.*/search.aspx\?query=(.+)
你必须逃避吗?使用\,因为它是一个正则表达式关键字

答案 1 :(得分:0)

问号需要使用“\?”

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