URL重寫
URL重寫,實質上是將網頁真實的URL隱藏起來,使用戶通過相應的虛擬URL訪問網頁資源,以彌補真是URL的許多不足
好處:
1.滿足搜索引擎需要,實現搜索引擎中的排名優化
很多搜索引擎不支持動態鏈接無法抓去動態網頁,尤其是帶“?”查詢參數的網頁,而且靜態網頁優先度高於動態網頁
2.隱藏網頁實現技術,增強網頁安全性
如果網頁上含jsp或aspx 製作網站的技術一目瞭然。但如果將頁面重寫 黑客將無法知曉網頁技術,大大降低網頁收到攻擊的可能性
3.提高網站的可用性和專業性
太長的URL會給網站帶來可用性問題
4.使用URL支持“可刪減”的需求
很多搜索引擎不支持動態鏈接無法抓去動態網頁,尤其是帶“?”查詢參數的網頁,而且靜態網頁優先度高於動態網頁
如果網頁上含jsp或aspx 製作網站的技術一目瞭然。但如果將頁面重寫 黑客將無法知曉網頁技術,大大降低網頁收到攻擊的可能性
使用HttpModule實現URL重寫
代碼實例
<div>
<a href="goods_1.html">1</a>
<a href="goods_2.html">2</a>
</div>
namespace ch3
{
public class GOODHT : IHttpModule
{
public void Dispose()
{
throw new NotImplementedException();
}
public void Init(HttpApplication context)
{
//請求處理之前觸發的事件
context.BeginRequest += context_beginRequest;
}
void context_beginRequest(object sender,EventArgs e) {
HttpApplication app = sender as HttpApplication;
//獲取請求的原始的URL
string url = app.Request.RawUrl;
//正則表達式:.../goods_1.html
Regex regex = new Regex(@"\w+_\d+\.html");
if (regex.IsMatch(url))
{
//如果符合格式,則需要進行URL重寫
//截取URL中的編號
int line = url.LastIndexOf("_");
int dot = url.LastIndexOf(".");
string id = url.Substring(line + 1, dot - line - 1);
//拼接真實的URL
string dcURL = "Good.aspx?id=" + id;
//跳轉 Server.Transfer
app.Server.Transfer(dcURL);
}
}
}
}
//節點配置
<system.webServer>
<modules>
<add name="url" type="ch3.GOODHT"/>
</modules>
</system.webServer>
使用URLRewriter.dll實現URL重寫
只要在Web.config文件中添加URL重寫規則
1.下載URLRewriter.dll下載地址 http://download.microsoft.com/download/0/4/6/0463611e-a3f9-490d-a08c-877a83b797cg/MSDNURLRewriting.nsu
2.在網站中添加引用URLRewriter.dll
3.在網站中添加頁面
4.web.config文件中配置使用URLRewriter.dll
將configSections節點作爲configuration的第一個子節點進行添加
用於指定配置節RewriterConfig的處理程序類的名稱爲URLRewriter.Config.Rewriter.ConfigSerializerSectionHandler
將所有擴展名爲.html文件的HTPP請求映射到類 URLRewriter.RewriterFactoryHandler中添加規則
代碼示例
<div>
<a href="goods_1_45.html">1</a>
</div>
節點配置
<!--dll重寫URL 必須放低一個-->
<configSections>
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
</configSections>
<!--規則-->
<RewriterConfig>
<Rules>
<RewriterRule>
<LookFor>~/goods_(\d)+\.html</LookFor>
<SendTo>~/Good.aspx?id=$1</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>~/goods_(\d)_(\d+)+\.html</LookFor>
<SendTo>~/Good.aspx?id=$1&id2=$2</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>
<system.webServer>
<handlers>
<add verb="*" path="*" type="URLRewriter.RewriterFactoryHandler, URLRewriter" name ="urlrewriter"/>
</handlers>
</system.webServer>
實現多個參數URL重寫
多個參數用&間隔 (URL中連接多個參數&)取值爲()裏面的值
例如
<LookFor>~/goods_(\d)_(\d)+\.html</LookFor>
<SendTo>~/Good.aspx?id=$1&pwd=$2</SendTo>