2010-02-19 133 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將返回兩個「店」,「項目」