技術源自原 cnblogs 程式,從中拆分出 DLL 復用。核心採404 錯誤觸發重寫:虛擬主機多不支援靜態檔案 URL 重寫,將 IIS 404 錯誤頁指向特定 ASPX,在其中調用重寫邏輯。
public class Error404 : System.Web.UI.Page {
private void Page_Load(object sender, System.EventArgs e) {
if (Request.QueryString != null) {
string[] queryString = Request.RawUrl.Substring(Request.RawUrl.IndexOf("?")+1).Split(new char[]{';'});
if (queryString.Length == 2 && queryString[0] == "404") {
Uri uri = new Uri(queryString[1]);
string query = uri.Query;
if (query.StartsWith("?")) query = query.Substring(1);
this.Context.RewritePath(uri.AbsolutePath, uri.UserInfo, query);
(new UrlReWriteHandlerFactory()).GetHandler(this.Context, Request.RequestType, uri.PathAndQuery, Server.MapPath(uri.LocalPath)).ProcessRequest(this.Context);
this.Context.Response.End();
}
}
}
}
<HttpHandler pattern="^/place/cn/([%0-9a-zA-Z/]*).aspx$"
type="Step1.UrlRewriter.PageHandlerFactory,Step1.UrlRewriter"
handlerType="Redirect"
pageLocation="/place/Place.aspx?p=$1" />
效果:/place/cn/aaaaaaa.aspx 內部轉向至 /place/Place.aspx?p=aaaaaaa。
其餘代碼多取自 cnblogs 開源碼,有需求可參考原始碼或聯繫作者獲取。