ASP.NET中的URLRewrite

來源:互聯網
上載者:User
 一、URL Rewrite

URL Rewrite是截取傳入Web 請求並自動將請求重新導向到其他URL的過程。

比如瀏覽器發來請求hostname/101.aspx ,伺服器自動將這個請求中定向為http://hostname/list.aspx?id=101。

URL Rewrite的優點在於:

1. 縮短URL,隱藏實際路徑提高安全性
2. 易於使用者記憶和鍵入
3. 易於被搜尋引擎收錄

有很多種手段實現URL Rewrite,我選擇了我認為最好的一種。這種方法的優點在於,不需要更改任何與IIS有關的設定,而且在中等信任安全等級的虛擬機器主機中,也可以使用。

二、實現細節

1. 準備URLRewrite.NET的類庫,將網站引用這個類庫;

2. 將configSections加入到configuration的第一節:

<configSections>
<section name="rewriter"
requirePermission="false"
type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter" />
</configSections>

3. 將對httpModule的處理加入到system.web中:

<httpModules>
<add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter" />
</httpModules>

4. 在configuration中,加入對rewrite的設定:

<rewriter>
<rewrite url="~/Articles/(\d+)" to="~/Articles/Detail.aspx?id=$1" />
<rewrite url="~/Categories/(\d+)" to="~/Articles/List.aspx?id=$1" />
<rewrite url="~/Categories/(\d+)_(\d+)" to="~/Articles/List.aspx?id=$1&amp;page=$2" />
</rewriter>

需要注意的是,當使用多個參數時,需要使用HTML逸出字元來代替&符號。

三、IIS配置

在IIS 7中,URLRewriter.NET可以不經配置正常使用,但是在IIS 6中,需要進行一些配置,詳見以下連結。

http://urlrewriter.net/index.php/support/installation/windows-server-2003

四、ASP.NET的Postback設定

由於在使用了UrlRewriter後,ASP.NET中的Postback機制導致頁面發生回送後,會在瀏覽器中使用其原始連結,容易使使用者發生困惑,也不利於搜尋引擎的檢索,故需要加以處理。

在ASP.NET 2.0後,我們可以通過使用控制項適配器的擴充架構來定製重寫<form>的action屬性,而不需要對頁面代碼做出任何改動。

1. 在App_Code中,加入FormRewriter.cs檔案:

using System.Web;
using System.Web.UI;

 

public class FormRewriterControlAdapter : System.Web.UI.Adapters.ControlAdapter
{
protected override void Render(HtmlTextWriter writer)
{
base.Render(new RewriteFormHtmlTextWriter(writer));
}
}

public class RewriteFormHtmlTextWriter : HtmlTextWriter
{
public RewriteFormHtmlTextWriter(HtmlTextWriter writer)
: base(writer)
{
InnerWriter = writer.InnerWriter;
}

public RewriteFormHtmlTextWriter(System.IO.TextWriter writer)
: base(writer)
{
InnerWriter = writer;
}

public override void WriteAttribute(string name, string value, bool fEncode)
{
if ((name == "action"))
{
HttpContext Context = HttpContext.Current;
if (Context.Items["ActionAlreadyWritten"] == null)
{
value = Context.Request.RawUrl;
Context.Items["ActionAlreadyWritten"] = true;
}
}
base.WriteAttribute(name, value, fEncode);
}
}

2. 在App_Browsers中,加入Form.browser檔案:

<browsers>
<browser refID="Default">
<controlAdapters>
<adapter controlType="System.Web.UI.HtmlControls.HtmlForm" adapterType="FormRewriterControlAdapter" />
</controlAdapters>
</browser>
</browsers>

這樣處理後,就可以保證頁面在發生Postback後,仍然使用原來的URL作為連結。

轉自:http://kb.vigal.net/asp-net-url-rewrite/ 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.