使用HttpModule實現URL重寫
使用HttpModule實現URL重寫
Request.PathInfo技術的替換方法是,利用ASP.NET提供的HttpContext.RewritePath方法。這個方法允許開發人員動態地重寫收到的URL的處理路徑,然後讓ASP.NET使用剛重寫過後的路徑來繼續執行請求。
譬如,我們可以選擇向大眾呈示下列URL:
http://www.store.com/products/DVDs.aspx
http://www.store.com/products/CDs.aspx
在外界看來,網站上有三個單獨的網頁(對搜尋爬蟲而言,這看上去很棒)。通過使用 HttpContext的RewritePath方法,我們可以在這些請求剛進入伺服器時,動態地把收到的URL重寫成單個Products.aspx網頁接受一個查詢字串的類別名稱或者PathInfo引數。譬如,我們可以使用Global.asax中的Application_BeginRequest事件,來這麼做:
string fullOrigionalpath = Request.Url.ToString();
if (fullOrigionalpath.Contains("/Products/Books.aspx")) {
Context.RewritePath("/Products.aspx?Category=Books");
}
else if (fullOrigionalpath.Contains("/Products/DVDs.aspx")) {
Context.RewritePath("/Products.aspx?Category=DVDs");
}
}
手工編寫象上面這樣的編碼的壞處是,很枯燥乏味,而且容易犯錯。我建議你別自己寫,而是使用網上現成的HttpModule來完成這項工作。這有幾個你現在就可以下載和使用的免費的HttpModule:
這些模組允許你用宣告的方式在你應用的web.config檔案裡表達匹配規則。譬如,在你應用的web.config檔案裡使用UrlRewriter.Net模組來把上面的那些URL對映到單個Products.aspx頁上,我們只要把這個web.config檔案新增到我們的應用裡去就可以了(不用任何編碼):
<configuration>
<configSections>
<section name="rewriter"
requirePermission="false"
type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter" />
</configSections>
<system.web>
<httpModules>
<add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter"/>
</httpModules>
</system.web>
<rewriter>
<rewrite url="~/products/books.aspx" to="~/products.aspx?category=books" />
<rewrite url="~/products/CDs.aspx" to="~/products.aspx?category=CDs" />
<rewrite url="~/products/DVDs.aspx" to="~/products.aspx?category=DVDs" />
</rewriter>
</configuration>
上面的HttpModule URL重寫模組還支援正規表示式和URL模式匹配(以避免你在web.config 檔案裡硬寫每個URL)。所以,不用寫死類別名稱,你可以象下面這樣重寫匹配規則,把類別名稱動態地從任何/products/[類別].aspx組合的URL裡取出來:
<rewrite url="~/products/(.+).aspx" to="~/products.aspx?category=$1" />
</rewriter>
這使得你的編碼極其乾淨,並且擴充套件性非常之好。
樣例下載:我建立的一個使用UrlRewriter.Net模組展示這個技術的樣例應用可以在這裡下載。
這個樣例和這個技術的很好的地方在於,為部署使用這個方法的ASP.NET應用,不需作任何伺服器配置改動。在設定為中等信任安全等級(medium trust)的共享主機的環境裡,這個技術也行之有效 (只要把檔案FTP/XCOPY到遠端伺服器就可以了,不需要安裝)。
相關文章
- Nginx實現URL重寫Nginx
- PHP實現url重寫和.htaccessPHP
- 請問如何實現URL重寫?
- Nginx實戰(二) URL重寫Nginx
- Java UrlRewrite 實現網站URL重寫過程實錄Java網站
- 使用 HTTP 模組執行 URL 重寫HTTP
- nginx url重寫Nginx
- 在struts2中實現去掉字尾及url重寫
- ASP.NET URL Rewrite. URL重寫ASP.NET
- URL 重寫新手指南
- URL重寫(rewrite)的具體實現與異常問題解決
- nginx TP5 URL 重寫Nginx
- 【ASP.NET Core】URL重寫ASP.NET
- IIS SSL認證流程& url重寫
- Session,Cookie,jsessionid,Url重寫SessionCookieJS
- Nginx URL重寫規則配置詳解Nginx
- Laravel重寫資源路由自定義URLLaravel路由
- 如何 把下面這個url 重寫 用response 重寫到請求中...
- Asp.net下使用HttpModule模擬Filter,實現許可權控制ASP.NETHTTPFilter
- Nginx實現url請求不區分大小寫Nginx
- ASP.NET URL雙向改寫的實現ASP.NET
- 用RecyclerView 重寫LayoutManager實現BannerViewView
- 應用Url重寫時CSS引用問題CSS
- IIS7 asp.net URL重寫配置ASP.NET
- .htaccess技巧: URL重寫(Rewrite)與重定向(Redirect)
- 【iis】URL重寫可以引用原地址內容
- Exchange域名重寫,實現SMTP地址共享
- ThinkPHP5.0 Linux Apache/Nginx重寫URL配置PHPLinuxApacheNginx
- 利用apache的mod_rewrite做URL規則重寫Apache
- UrlReWrite(Url重寫或偽靜態)完美示例原始碼原始碼
- 自定義HttpMessageHandler實現HTTP方法的重寫HTTP
- IIS7.0設定 url重寫成html(偽靜態)HTML
- 手把手教你寫網路爬蟲(7):URL去重爬蟲
- 【Henry Liu】ASP.NET 2.0 中的URL 重寫技術ASP.NET
- ASP.NET中獲取URL重寫前的原始地址ASP.NET
- 在ASP.Net2.0中使用UrlRewritingNet實現連結重寫ASP.NET
- win7+iis7+ASP.NET URL重寫實現偽靜態,除錯OK,但釋出就報 404錯誤Win7ASP.NET除錯
- NodeJS 說說“重寫” 自定義stream 的實現NodeJS