最近更新|最新推薦|軟件排行|創e測評|軟件分類|手機版|軟件專題|軟件發布IIS中的URL重寫rewrite

創e測評

教程測評
創e > 創e測評 > 資訊共享 > 創e日志 > > IIS中的URL重寫rewrite

IIS中的URL重寫rewrite

  發布時間:2012/8/3 2:17:15 查看評論
分享收藏吧:

1.  概述
 
   突然間接到了一個任務,將URL中的一個字段都轉成另一個字段,然后再重新發送到Server端,例如將http://***/GEO/***轉換成http://***/ArcGIS/***,然后再轉發到Server端,上網查了一下資料,突然發現這里面有很大的研究空間,現在在這里學習一下。
   所謂的URL重寫就是截取傳入Web請求并自動將請求重定向到其他URL過程,比如瀏覽器發來請求hostname/101.aspx服務器自動將這個請求中定向為http://hostname/list.aspx?id=101,url重寫的優點在于:
   1.縮短url隱藏實際路徑提高安全性
   2.易于用戶記憶和鍵入
   3.易于被搜索引擎收錄
    一般常用的URL重寫方式有ISAPI重寫,.NET重寫等。在這里我首先對ISAPI重寫方式進行學習和總結,然后再對.NET重寫的方式進行學習總結。
 
2.  ISAPI方式重寫URL
 
    在ISAPI方式重寫URL中有兩款好用的第三方插件可以供我們選擇,兩款服務器擴展插件都有各自的擁護者,通過筆者的試用,各有千秋。
一種是ISAPI_Rewrite,
下載地址在:http://www.helicontech.com/download/
    這里只有ISAPI Rewrite的一個LITE版本是免費的,其它都是trial版本。ISAPI Rewrite Lite的版本功能不支持虛擬站點配置,元數據監測和自動緩存清理。 但是基本的UrlRewrite功能都支持。該款服務器擴展插件是利用正則表達式來進行替換規則的控制。
另一種是IIRF(為了方便少寫幾字,以后的Ionic’s Isapi Rewrite Filter將全部簡寫),
下載地址在:http://iirf.codeplex.com/
    IIRF是一款開源的重寫URL過濾器,類似于Apache的URL重寫,基于VC8.0(可以用Visual Studio2005或Visual C++ 2005 Express重新編譯)開發。它可以運行在IIS5.0+,支持ASP,ASP.NET,PHP等許多格式。相對比ASP.NET2.0自帶的URL重寫,具有更好的性能和許多我們所需要特性,重要的一點在于:它可以支持無擴展名的URL(例如:cnlbogs.com/****,你無需在創建一個默認的default.aspx文件,IIRF自動會幫你解析),讓URL更加的方便我們記憶,也能進一步提高搜索的排名?IIRF能夠在aspnet_isapi提前捕獲我們所請求的URL進行處理,如果我們訪問cnlbogs.com/a.aspx,需要獲取cnlbogs.com/a.htm,步驟需要(iis-aspnet_isapi),通過IIRF,我們可以直接跳aspnet_isapi.dll,直接訪問a.htm,要知道,這種方式在ASP.NET是無法實現的。
    IIRF跟重寫URL一樣,它也是基于正則的方式來匹配,具有LOG記錄,請求的條件判斷。還是進入正題吧。
 
2.1  IIRF
 
2.1.1 安裝
 
    IIRF安裝需要我們手動操作來完成。不過。也是很方便了。
    1. 將IsapiRewrite4.dll, IsapiRewrite4.ini復制到c:\windows\system32\inetsrv(你也可以復制到其它適當的文件夾下面), IsapiRewrite4.ini是IIRF配置文件,每次該文件更改之后,IIRF會自動重新加載該文件,無需重啟IIS來重新加載配置,如果您修改后INI文件后格式不正確,IIRF將會自動獲取最后正確加載的配置文件;
    2. 打開IIS管理器,選擇“默認網站”,右擊“屬性”,選擇“ISAPI篩選器”,點擊“添加”,輸入篩選器名稱:Ionic Rewriter,可執行文件選擇上面復制到c:\windows\system32\inetsrv下面的IsapiRewrite4.dll文件,點“確定”;
    3. 重啟IISADMIN service服務;(在計算機管理—-windows服務里面)
    4. 完成。
 
2.1.2  日志

    IIRF能夠將INI配置文件加載,用戶的URL請求記錄都會保存到指定的日志文件里。因為具有很大的性能開銷,因此建議將日志的記錄等級設為0,只有為了方便調試的時候時候,可以設置為5。
     RewriteLog <filename stub>  保存的日志路徑,如 c:\temp\iirfLog.out
     RewriteLogLevel {0,1,2,3,4,5} 日志的等級,默認值為0,
     0 –不會記錄日志;
     1- 少許的日志;
     2-  比較多的日志;
     3- 比較詳細的日志;
     4- 詳細的日志(4),并會跟蹤server variable和替換的字符串;
     5- 詳細的日志(5),包括日志文件更改的事件,建議方便調試的時候使用。
 
2.1.3  正則
 
    正則的語法跟.NET一樣,只不過是格式不一樣而已。所以我也不在詳細介紹。具體有關正則的說明大家可以google一下。
 
2.1.3.1  RewriteRule
 
RewriteRule <url-pattern> <replacement-string>   [<modifiers>]
url-pattern:匹配的正則表達式(必需)
replacement-string:要替換的字符串(必需)
modifiers:有關對RewriteRule的操作標記。可選選項。在下面我會說明
默認下IIRF的url-pattern,replacement-string正則的前面已經帶了主機頭的。
為了方便描述,直接看幾個示例(以下示例基本全部來源IIRF文檔)
例1
RewriteRule  ^/original/(.*).php  /modified/$1.aspx
源:http://xxx/original/index.php
目標:http://xxx/modified/index.aspx
例2
RewriteRule  ^/dinoch/album/([^/]+)/([^/]+).(jpg|JPG|PNG)   /chiesa/pics.aspx?d=$1&p=$2.$3
源:http://xxx/dinoch/album/30/1.jpg
目標:http://xxx/chiesa/pics.aspx?d=30&p=1.jpg
規則比較簡單,主要還在于modifiers的功能。下面列舉了它的所有值,允許組合(如[R,L])。
1.[R]  or [R=code]
R = Redirect(URL跳轉到<replacement-string>地址
就像我們在.NET使用的Redirect方法一樣,重新改變瀏覽器的方向,跳轉到新的指定的URL中。
[R=code]允許我們指定特定的HTTP狀態返回碼。只能介于301到399。如果超出這個范圍。默認會是使用302狀態。
RewriteRule ^/goto.aspx?r=(.*)$ $1 [R]
源:http://xxx/goto.aspx?r=http://www.google.com/
目標:http://www.google.com
2.[NF]
NF = Not found(返回404錯誤給用戶,但該文件并未移除,還是保留在網站中)
它還可以跟RewriteCond一起配合,來實現自定義的404錯誤請求。特別要注意,你所要匹配的文件必須存在,替換的字符串不允許是存在文件名
RewriteRule ^/1008.aspx$ /1.aspx [NF]
1008.aspx文件需要存在,1.aspx不存在,否則無法正常達到我們的結果。
3.[L]
L = Last test if match(如果已經匹配,將不在繼續匹配下去)
4.[F]
F = Forbidden(跟NF標志相似,)
5.[I]
I = Do case-insensitive matching 模糊匹配
6.[U]
U = Store original url in server Variable HTTP_X_REWRITE_URL(保存原始的url到HTTP_X_REWRITE_URL服務器變量中。)
    保存原始的url到HTTP_X_REWRITE_URL服務器變量中。在ASP.NET你可以用Request.ServerVariables["HTTP_X_REWRITE_URL"]獲取原始值。
 
2.1.3.2  RewriteCond
 
RewriteCond <test-string> <pattern> [<modifier flag[,...]>]
類似于條件判斷,并且允許多個條件,OR,AND。只有當RewriteCond的Server Variable 匹配所指定的正則表達,RewriteRule才會執行。比如:

關鍵詞:IIS  URL  重寫  rewrite  

瀏覽量:
街机电玩捕鱼版 江苏快3开奖历史 体彩店怎么买足彩 北京时时的官网 重庆时时彩缩水安卓版 意甲教母贝伦 棋牌游戏可以提现的 福彩彩票指南电子报 河北时时投注站 广西快三计划软件手机版 彩图图库历史记录