2014-05-10 44 views
0

我使用網址重寫。我添加了一些這樣的規則:有什麼不對我的網址重寫正則表達式

<add name="Homes" virtualUrl="^/(.*).html" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="/Default.aspx?vsm=$1" ignoreCase="true" /> 
    <add name="HomeNew" virtualUrl="^/(.*)/(.*)/" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="/Default.aspx?vsm=$1&amp;idcnew=$2" ignoreCase="true" /> 
    <add name="HomeNewPage" virtualUrl="^/(.*)/(.*)/page-([0-9-]*).htm" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="/Default.aspx?vsm=$1&amp;idcnew=$2&amp;page=$3" ignoreCase="true" /> 
    <add name="HomeNewNew" virtualUrl="^/(.*)/(.*)/(.*)-([0-9-]*).htm" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="/Default.aspx?vsm=$1&amp;idcnew=$2&amp;idnew=$4" ignoreCase="true" /> 

我必須使用它們全部。 在HomeNewPage規則中,我使用獲取目錄新頁面。在HomeNewNew規則中,我使用$ 3獲取新內容是新名稱的url名稱。 但是當去到這個鏈接:「/新聞/警報/第2頁」我的請求是「vsm =新聞& idcnew = Alertpage-2」 我想我的請求是「vsm =新聞& idcnew =警報& page = 2 「 請幫幫我!怎麼了?以及如何解決它?

+0

你需要逃避你的點,首先,'\ .htm' – hwnd

+0

我不明白。你能爲我做一個例子! –

回答

1

如果url就像

  • 「/Default/News/Alert/page-2.html」

    Regex:- /(.*)/(.*)/(.*)/page-(.*).html 
    
  • 「/默認/新聞/警報/頁2 「

    正則表達式: - /(.*)/(.*)/(.*)/page-(.*)

    ,並可以使新的URL爲/Default.aspx?vsm=$2 & idcnew = $ 3 &頁= $ 4

基本上每個(。*)指定一個像

  • 默認參數爲$ 1
  • 新聞是$ 2
  • 警報是$ 3
  • 但我們硬編碼page-所以它不是一個參數。所以,(。*)後頁面級出來是參數$ 4

如果我們把你的第二個表達式^ /(。*)/(。*)/。在這種情況下,它可能會導致像News/Alert/page-2這樣的url問題,因爲它最終不會「/」。與.html相同的原因。 因爲你還沒有提供的網址,所以我不知道^。但是,只有當你的url從第一個字符完成正則表達式時纔會出現,但是,它不會導致任何問題。您可以指定或刪除它。

+0

但我必須使用上面的所有正則表達式。我必須使用「^ /(。*)/(。*)/」獲得鏈接「/新聞/警報/」第1頁 –

+0

您可以使用我提供的正則表達式或您提供的最後兩個正則表達式想要頁面= 2。 您要做的更改是在.htm(或.html,取決於URL)之前放置'\',因爲反斜槓將轉義特殊字符「。」。 – Tanul

+0

我改變我的正則表達式爲「/([a-zA-Z0-9-]*)/([a-zA-Z0-9-]*)/page-([0-9-]*)\.htm 「和」/([a-zA-Z0-9 - ] *)/([a-zA-Z0-9 - ] *)/「但是當我進入」/ News/Alert/page-2「時,請求仍然是「vsm = News&idcnew = Alertpage = 2」 –

0

據我你的正則表達式表達:

/([a-zA-Z0-9-]*)/([a-zA-Z0-9-]*)/page-([0-9-]*)\.htm

會工作。但這種表達

/([a-zA-Z0-9-]*)/([a-zA-Z0-9-]*)/"

不會工作,因爲它不包括arguement第三標籤(頁-2)。但這將工作到/新聞/警報。請檢查您的代碼,或嘗試根據我進行調試,完成一些硬編碼。由此你得到錯誤。

我給你一個很簡單的方法來檢測你的表情。在此之後,您將能夠適當地驗證您的表達式。

轉到此鏈接:http://www.rexfiddle.net/

,插入你的表達,並在第二個窗口中插入您想要的網址。在此之後,您將在最後的捕捉捕捉1,捕捉2,捕捉3中獲得捕捉。這些將會成爲您的爭論($ 1,$ 2 ......)。見下圖:

Result_1st_expresssion

+0

非常感謝你!我已經得到了我的解決方案。我把這個正則表達式「/([a-zA-Z0-9-]*)/([a-zA-Z0-9-]*)/page-([0-9-]*)\.htm」before正則表達式「/([a-zA-Z0-9 - ] *)/([a-zA-Z0-9 - ] *)/」。它工作正常。謝謝你的幫助! –

+0

哦,太棒了!這種類型的錯誤總是在調試中遇到。我告訴你調試代碼而不是直接運行。調試將很容易地顯示出究竟哪個url模式最終被使用。另一個網址也是正確的,但它會完成網址直到警報,因爲哪個控件不會進入下一個正則表達式。無論如何,有時我們的頭腦不會與這樣一個小小的錯誤工作。這對開發者來說很常見。請享用!!!! – Tanul