2010-02-19 94 views
1

在我的asp.net应用程序,我有URL www.site.com/rugby与之相匹配的,我有正则表达式正则表达式extenionless URL

“〜/(.+)”,这工作完全正常。但是,如果我再次导航到www.site.com/login.aspx,正则表达式匹配这个表达式“/(.+)”。

简单的说,我想要一个只匹配extenionless url的正则表达式。如果扩展出现在URL,然后不匹配,这得益于

<RewriterRule> 
       <LookFor>~/(.+)/(.+)/(.+)/</LookFor> 
       <SendTo>~/Shop/Item.aspx?cn=&1&amp;it=$2&amp;ft=$3</SendTo> 
</RewriterRule> 

回答

0

/([^?\.]*)(\?.*)?$正常工作对于这些:

/Shop/Item.aspx?cn=&1&it=$2&ft=$3 
/Shop/Item?cn=&1&it=$2&ft=$3 
/Shop/Item.aspx 
/Shop/Item 

(由“正则表达式工作台”提供)是正则表达式的翻译

/ 
Capture 
    Any character not in "?\." 
    * (zero or more times) 
End Capture 
Capture 
    ? 
    . (any character) 
    * (zero or more times) 
End Capture 
? (zero or one time) 
$ (anchor to end of string) 
0

,你可以用这个表达式尝试。

/([^?\./]*)(?![^?\./]*[?\.]) 

它只应该匹配路径组件而不是文件。

所以对于这些网址:

/Shop/Item.aspx?cn=&1&it=$2&ft=$3 
/Shop/Item?cn=&1&it=$2&ft=$3 
/Shop/Item.aspx 
/Shop/Item 

前三个会返回一个匹配,即“店铺”,但最后ONW将返回两个“店”,“项目”