.NET完美實現僞靜態頁面,URLRewriter.dll下載

URL 重寫是截取傳入 Web 請求並自動將請求重定向到其他 URL 的過程。
比如瀏覽器發來請求hostname/101.aspx ,服務器自動將這個請求中定向爲http://hostname/list.aspx?id=101。

url重寫的優點在於:
縮短url,隱藏實際路徑提高安全性
易於用戶記憶和鍵入。
易於被搜索引擎收錄

二 實現url重寫的基本方法
下載MS的URLRewriter.dll,放到你的web程序的bin下
下載地址1:http://www.sinoec.cn/fordown/URLRewriter.dll
下載地址2:download.microsoft.com/download/0/4/6/0463611e-a3f9-490d-a08c-877a83b797cf/MSDNURLRewriting.msi

下載完成後,在web.config裏設置如下:


<?xml version="1.0" encoding="utf-8" ?>
<!--overred-->
<configuration>
<configSections>
<section name="RewriterConfig"type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
</configSections>
<RewriterConfig>
<Rules>
<RewriterRule>
<LookFor>~/d(/d+)/.aspx</LookFor>
<SendTo>~/default.aspx?id=$1</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>
<system.web>
<httpHandlers>
<add verb="*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
</httpHandlers>
</system.web>
</configuration>


其中
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />

用於指定配置節"RewriterConfig"的處理程序類的名稱爲”URLRewriter.Config.RewriterConfigSerializerSectionHandler”,該類存在於bin目錄下的URLRewriter .dll文件中

關鍵的是這兩句
<LookFor>~/d(/d+)/.aspx</LookFor>
<SendTo>~/default.aspx?id=$1</SendTo>

< LookFor>~/d(/d+)/.aspx</LookFor>表示,用戶輸入的url,d(/d+)/.aspx是 url中文件名匹配的正則表達式(此處爲字母d開頭,後面跟一個或多個數字,並以.aspx結尾。用戶也可根據自己的需要自行設定)。
<SendTo> ~/default.aspx?id=$1</SendTo>,表示當服務器接收到符合上面條件的請求後如何重寫url。此處表示訪問 defalutl.aspx並傳入參數id,其值$1將用用戶請求的文件名中的第一個數字來表示。
例如用戶輸入 hostname/d11.aspx,服務器會把他重寫爲http://hostname/default.aspx?id=11。換句話說用戶輸入 http: //hostname/d11.aspx,實際訪問的是http://hostname/default.aspx?id=11。這樣就起到了隱藏真實文件名,並便於用戶記憶的作用。

iis註冊:如果要實現.html 的僞靜態頁面,就要進行IIS配置。要選擇ASPX進行編輯,圖有錯。





還有第八步中的”untick Verify that file exists.“要看仔細。否則重寫HTML就無效。

4:備註

不要在"應用程序擴展"裏“添加" .html的映射,否則正常的html將無法訪問。

////////////////////////////////////////////////////////////////

  1. 打開Internet信息服務( IIS )管理器

    click to expand 點擊展開
  2. Right-click on the website where you want to configure UrlRewriter.NET and select Properties.右點擊這個網站,只要你想配置urlrewriter.net並選擇屬性。

    click to expand 點擊展開
  3. Click on the Home Directory tab.點擊home目錄選項卡。

    click to expand 點擊展開
  4. Click the Configuration button.點擊配置按鈕。

    click to expand 點擊展開
  5. Select the .asax application extension and click Edit…選擇。 asax申請延期,並單擊編輯…

    click to expand 點擊展開
  6. Copy the Executable path (…/aspnet_isapi.dll) to the clipboard and click Cancel.拷貝可執行文件路徑( … … / aspnet_isapi.dll )到剪貼板,然後點擊取消。

    click to expand 點擊展開
  7. Click Insert…點擊插入…

    click to expand 點擊展開
  8. Paste the Executable path (…/aspnet_isapi.dll) from the clipboard, untick Verify that file exists.糊一個可執行文件路徑( … … / aspnet_isapi.dll )由剪貼板, untick驗證文件是否存在。

    click to expand 點擊展開
  9. Click OK to close the Add/Edit Application Extension Mapping dialog單擊確定關閉添加/編輯應用擴展映射對話框

    click to expand 點擊展開
  10. Click OK to close the Application Configuration dialog.單擊確定關閉該應用程序配置對話框。

 

處理回發
在重寫後的url裏如果產生回發,例如有一個按鈕,又調用了該被重寫的 aspx,用戶瀏覽器中將會顯示該aspx文件實際的地址,也就是http: //hostname/default.aspx?id=11。但從用戶的角度考慮,如 果單擊按鈕時突然看到 URL 更改會使他們感到不安。因此必須解決這個問題。
解決方法有二:
(1)自己定義一個Actionlessform類,在aspx中不再使用系統提供的form 標記

namespace ActionlessForm
{
public class Form : System.Web.UI.HtmlControls.HtmlForm
{
protected override void RenderAttributes(HtmlTextWriter writer)
{
writer.WriteAttribute("name", this.Name);
base.Attributes.Remove("name");
writer.WriteAttribute("method", this.Method);
base.Attributes.Remove("method");
this.Attributes.Render(writer);
base.Attributes.Remove("action");
if (base.ID != null)
writer.WriteAttribute("id", base.ClientID);
}
}
}

創建此類並對其進行編譯之後,要在 ASP.NET Web 應用程序中使用它,應首先將其添加到 Web 應用程序的 References 文件夾中。然後,要使用它來代替 HtmlForm 類,做法是在 ASP.NET 網頁的頂部添加以下內容:

<%@ Register TagPrefix="skm" Namespace="ActionlessForm" Assembly="ActionlessForm" %>
然後,將 <form runat="server">(如果有)替換爲:<skm:Form id="Form1" method="post" runat="server">
並將右邊的 </form> 標記替換爲:</skm:Form>

個人並不推薦該方法
(2)第二種方法就是繼承page,這樣你不需要在aspx頁中改任何東西。
代碼:
using System;
using System.IO;
using System.Web;
using System.Web.UI;
namespace URL
{
public class OLPage : Page
{
public OLPage()
{}
protected override void Render(HtmlTextWriter writer)
{
if (writer is System.Web.UI.Html32TextWriter)
{
writer = new FormFixerHtml32TextWriter(writer.InnerWriter);
}
else
{
writer = new FormFixerHtmlTextWriter(writer.InnerWriter);
}
base.Render(writer);
}
}

internal class FormFixerHtml32TextWriter : System.Web.UI.Html32TextWriter
{
private string _url; // 假的URL

internal FormFixerHtml32TextWriter(TextWriter writer):base(writer)
{
_url = HttpContext.Current.Request.RawUrl;
}

public override void WriteAttribute(string name, string value, bool encode)
{
if (_url != null && string.Compare(name, "action", true) == 0)
{
value = _url;
}
base.WriteAttribute(name, value, encode);

}
}

internal class FormFixerHtmlTextWriter : System.Web.UI.HtmlTextWriter
{
private string _url;
internal FormFixerHtmlTextWriter(TextWriter writer):base(writer)
{
_url = HttpContext.Current.Request.RawUrl;
}

public override void WriteAttribute(string name, string value, bool encode)
{
if (_url != null && string.Compare(name, "action", true) == 0)
{
value = _url;
}
base.WriteAttribute(name, value, encode);
}
}

}

把這個文件編譯成dll,並在你的項目中引用它。


然後把項目中的所有aspx文件對應的cs文件中的繼承page類的代碼改寫爲繼承OLPage。
例如
public class WebForm1:page
改寫爲
public class WebForm1:URL.OLPage

這樣就解決回發問題。
編譯*.dll方法:/t:library name.cs

 

二、關於RSS
RSS是用於RSS閱讀器的一種文件格式,也可以叫新聞種子,RSS種子等等。RSS是一個XML文件,後綴名可以是.aspx,但內容必須是Xml的。他的語法如下:
------------------- 一個RSS種子.xml --------------------------------
<?xml version="1.0" encoding="gb2312"?>
<rss version="2.0">
<channel>
<title>這個RSS種子(頻道)的名稱、標題</title>
<link>這個RSS種子(頻道)的連接地址.xml </link>
<description>這個RSS種子(頻道)的簡要說明,隨你怎麼寫...</description>
<item>
<title>具體的引用標題,比如一條新聞的標題</title>
<link>http://www.該條新聞的連接地址.com/真實的html或者aspx地址.aspx?aaa=1&bbb=2</link>
<description>該條新聞的介紹,一般是顯示一部分的新聞內容...</description>
<pubDate>這個不用說了,發佈日期</pubDate>
</item>
</channel>
</rss>
---------------------------------------------
爲了讓搜索引擎小蜘蛛知道這個種子在那裏,你可以在<head>中加入一個<link>告訴它。
<head>
...... ......
<link rel="alternate" type="application/rss+xml" title="我的RSS標題" href="http://www.myweb.com/rss/myrss.xml"/>
...... ......
</head>
-----------------------------------------------
爲了讓那些使用RSS新聞閱讀器的人可以訂閱種子,你需要把這個文件連接到[RSS]的圖片或一個(RSS)連接
三、關於OPML
OPML文件其實就是RSS文件的目錄集合,上面是一個RSS文件,而OPML是一大堆RSS文件的目錄。
OPML文件也是XML格式的,他的語法如下:
-------------- myopml.opml ---------------------
<?xml version="1.0" encoding="gb2312"?>
<opml version="1.0">
<head>
<title>這個OPML目錄文件的標題</title>
<link>這個OPML目錄文件的連接地址.opml</link>
<description>這個OPML目錄文件的簡要說明,隨你怎麼寫...</description>
<head>
<body>
<!-- 一條 outline 記錄一個RSS種子地址 -->
<outline type="rss"
title="RSS種子標題"
text="RSS種子文本,跟標題差不多"
description="RSS種子的簡要說明"
xmlUrl="RSS種子的連接地址.xml"
htmlUrl="RSS種子的html連接地址.xml"
/>
...... ......
</body>
</opml>
------------------------------------------------------
爲了讓搜索小蜘蛛知道OPML文件在那裏,你可以在<head>中寫一句<link>告訴它
<head>
... ...
<link rel="outline" type="application/xml" title=這個OPML文件的標題" href="這個OPML文件的地址.opml"/>
... ...
</head>

 

來源:http://hi.baidu.com/azhengwin/blog/item/435a4af8fbfa4108d9f9fdb9.html

發佈了21 篇原創文章 · 獲贊 4 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章