1

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

从:/search.aspx?query=test到:~/SearchResults?search=test

我尝试了各种组合,但看起来它没有考虑到问号后面的 url 部分

  <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

4

2 回答 2

5
.*/search.aspx\?query=(.+)

你要逃避吗?带有 \ 因为它是一个正则表达式关键字

于 2013-07-03T04:45:27.003 回答
0

问号需要用“\?”转义。

    <RewriterRule>
      <LookFor>.*/search.aspx\?query=(.+)$</LookFor>
      <SendTo>~/SearchResults?Search=$1</SendTo>
    </RewriterRule>
于 2013-07-03T04:50:16.227 回答