2012-05-30 76 views
1

我正在研究一個允許用戶在運行中創建和生成自己的頁面的系統。URL重寫器和動態頁面結構

我正在使用URL重寫器進行連接,這樣我就可以通過一個頁面訪問頁面,該頁面將通過查詢字符串傳遞頁面名稱/ ID。這是容易的部分,因爲我知道我可以使用:

<rewrite url="/(.+)/" to="/GenericPage.aspx?PageName=$1" /> 

現在來了有趣的一部分。用戶還可以創建具有子頁面和/或子文件夾的文件夾。這些文件夾可以很深,對深度沒有限制。我主要實現了這一點,因爲結構將生成頂級導航,這些文件夾是頂級菜單選項和子文件夾等。

我可以使用重寫規則來考慮在我需要的頁面之前可能有大量文件夾的規則嗎?我不想創建多個規則,因爲它看起來很髒,並依賴於最大數量的文件夾。

**What I'm trying to avoid** 
<rewrite url="/(.+)/(.+)/" to="/GenericPage.aspx?PageName=$2" /> 
<rewrite url="/(.+)/(.+)/(.+)/" to="/GenericPage.aspx?PageName=$3" /> 
<rewrite url="/(.+)/(.+)/(.+)/(.+)/" to="/GenericPage.aspx?PageName=$4" /> 
<rewrite url="/(.+)/(.+)/(.+)/(.+)/(.+)/" to="/GenericPage.aspx?PageName=$5" /> 
<!-- Where the additional (.+) are representative of folders --> 

我似乎已經把自己弄糟了(可能今天我有點累了)。

如果在URL重寫器中有take after 2nd last /規則,那將是完美的。

回答

0

我沒有URL重寫安裝與測試,但下面的正則表達式也許可以幫助:

.*/([^/]+?)/ 
0

我不使用ASPX但是,如果可以的話,你可能會更好使用的東西像

<rewrite url=".?" to="/RoutingHandler.aspx" /> 

這通過正則表達式繞過URL重寫(以及所有可能的參數逃避問題),以便在RoutingHandler.aspx您通過服務器變量訪問原始請求的URL。通過這個,你可以將正斜槓上的虛擬目錄分割成一個數組。您可以將數組映射到參數,數據庫中的頁面或任何您想要的內容。

.?只是最快的匹配 - 每個請求的正則表達式。您可能需要調整它,以免它劫持靜態內容請求。