我想像这样重写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>
是否有某些因素导致其跳过?
这是友好网址重写器的源代码,如果有帮助..我对正则表达式不是很好,所以我可以使用一些帮助。
答案 0 :(得分:3)
.*/search.aspx\?query=(.+)
你必须逃避吗?使用\,因为它是一个正则表达式关键字
答案 1 :(得分:0)
问号需要使用“\?”
进行转义 <RewriterRule>
<LookFor>.*/search.aspx\?query=(.+)$</LookFor>
<SendTo>~/SearchResults?Search=$1</SendTo>
</RewriterRule>