ASP.NET 2.0 內建 urlMappings 功能,透過 web.config 宣告式設定將特定 URL 映射至另一目標 URL,無需程式碼、無需 ISAPI Rewrite、無需 HTTP 模組,即可實現舊網址轉向、簡化複雜 URL、隱藏真實頁面結構等需求。
<configuration>
<system.web>
<urlMappings enabled="true">
<add url="~/Homepage.aspx" mappedUrl="~/OriginalHome.aspx" />
<add url="~/Products/Category.aspx" mappedUrl="~/Catalog/Category.aspx" />
<add url="~/OldPage.aspx" mappedUrl="~/NewPage.aspx" />
</urlMappings>
</system.web>
</configuration>
| 屬性 | 說明 |
|---|---|
enabled | true 啟用,false 停用(預設 false) |
url | 原始請求 URL(相對路徑,支援 ~),使用者瀏覽器見到的網址 |
mappedUrl | 實際處理請求的目標 URL(相對路徑,支援 ~),伺服器內部執行 |
https://site/Homepage.aspx。HttpApplication.BeginRequest 階段)攔截請求。urlMappings 集合,找到匹配項。mappedUrl(OriginalHome.aspx)。Homepage.aspx,使用者無感知。Request.RawUrl 仍為原始 URL。| 優勢 | 說明 | 應用場景 |
|---|---|---|
| 舊網址無縫轉向 | 不通知使用者、不修改書籤、搜尋引擎索引平滑遷移 | 網站改版、頁面重命名、架構調整 |
| 簡化複雜 URL | 對外公開簡短易記網址,內部映射至參數化長 URL | ~/p/123 → ~/ProductDetail.aspx?id=123&cat=5&view=detail |
| 導航選單整合 | SiteMap 節點使用簡化 URL,urlMappings 解析至實際頁面 | ASP.NET 官網選單結構 |
| 資訊安全強化 | 隱藏真實頁面名稱、目錄結構、技術細節 | 防止路徑遍歷探測、降低攻擊面 |
urlMappings 僅比對路徑部分,查詢字串自動保留並傳遞至目標頁面:
<add url="~/Search.aspx" mappedUrl="~/SearchResults.aspx" />
/product/{id})。<form action 可能為映射後 URL,需配合 Form.Action 修正或使用無表單頁面。正式版釋出前,可使用 Steve Smith 部落格提供的 HttpModule 實作:
public class UrlRewriterModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.BeginRequest += OnBeginRequest;
}
void OnBeginRequest(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
string path = app.Request.Path.ToLower();
// 簡易映射表
if (path == "/homepage.aspx") app.Context.RewritePath("/originalhome.aspx");
}
public void Dispose() { }
}
web.config 註冊:<add name="UrlRewriter" type="UrlRewriterModule" />
| 特性 | urlMappings (2.0) | Routing (4.0+) |
|---|---|---|
| 模式匹配 | 精確路徑 | 路由範本 {controller}/{action}/{id} |
| 雙向 URL 生成 | 不支援 | 支援 Url.RouteUrl |
| RESTful 風格 | 困難 | 原生支援 |
| 效能 | 極佳(早期管線) | 優(路由表快取) |
urlMappings 是 ASP.NET 2.0 時代最輕量的 URL 重寫方案,雖功能受限,但零程式碼、宣告式、效能極佳,適合靜態映射、舊網址遷移、簡化 URL 等明確場景。