2012年1月22日 星期日

設定 IIS 7.x HTTP 重新導向功能 (Configuring HTTP Redirection in IIS 7)

在網站的管理維護過程中,有時會需要對用戶端的網頁請求進行重新導向的情況,譬如:網頁名稱變更、目錄結構改變、網頁遷移至另一個新的位址、網頁的副檔名變更,變更網域名稱或更動伺服器等因素均是可能原因

,若網站不主動對HTTP請求做新網址的重新導向或網頁URL重寫,則一旦用戶端經由我的最愛、書籤、其他網頁的連結、搜索引擎來連結原先的網址時都會變成無法找到網頁的錯誤,亦即訪問舊網址時會將會得到 404 查無資料的錯誤網頁,如此一來,可能造成訪問流量的損失,甚至顧客抱怨等不利的後果。

而實務上想要將使用者所請求的網頁轉送到其它網頁或網址有多種不同的做法,常見的方法包括

  • HTTP重新導向(HTTP Redirection),亦即通知用戶端瀏覽器應向另一個網址位置請求新網頁
  • URL 重寫 (URL Rewrite),由網站伺服器不需通知用戶端的情況下自動將用戶請求轉送至另一個網址
  • meta refresh:直接利用網頁內的meta標籤來將網頁自動載入另一個位置的網頁,如右側例子 <meta http-equiv="refresh" content="2;url=http://www.lijyyh.com/">

本文將說明IIS 7的HTTP重新導向的功能與設定方法。

HTTP重新導向狀態碼

IIS7 支援三種網頁重新導向的方法與狀態碼:

  1. 301:301 重新導向是一種永久性的 URL 轉移 (Permanently Moved),這將告訴請求者其所請求的資源位置已經被永久性的搬移。採用301的重新導向方式將影響到網路搜尋引擎(例如Google、Bing)會忽略原始的URL,而利用導向的目的地URL來進行其索引,換言之,301重新導向將會永久轉換網頁排名和搜尋引擎的排名至新的位置。
    一般而言,如要轉送已刪除的網頁,或想要使用新的網域名取代舊的網域名稱建議採用301轉向方式。
  2. 302:在HTTP 1.0原始涵義為暫時性的搬移(Moved Temporarily);HTTP/1.1 是『Found』,多是用來未指定原因的情況下通知用戶端發出一個新的請求到另一個指定的網址位置,有些文章也會直接稱 302 是 Moved Temporarily。做法是會根據 HTTP 標頭的 Location 欄位值(稱做URI)來重新導向網址, 除非 Request Method 是 HEAD,否則伺服器端回覆的訊息內必須包含一個的新網址的連結 (hyperlink)資訊。302重新導向較可能會遺失您在搜尋引擎的排名,所以以搜尋引擎最佳化(SEO)角色來考量的話,較不建議使用301重新導向。
    一般而言,如果由於季節因素,網頁的變更只是一種暫時性的設計請使用302重新導向。
  3. 307:HTTP 1.1 中增訂了307 暫時轉移(307 Temporary Redirect),307 碼時只會根據 GET請求重新導向新的網址,亦即收到307回應時,瀏覽器只能對GET請求的重新導向,如此可防止網頁用戶端在瀏覽器發出 HTTP POST 要求時遺失資料。

設定HTTP 重新導向

您可以針對伺服器、站台、應用程式、目錄或檔案層級加設定重新導向,不過您須要先安裝【HTTP重新導向】這項IIS角色服務,其設定步驟與說明如下:

1. 開啟 IIS 管理員並選取所要重新導向的的伺服器、站台或目錄層級 (本例選取預設站台)。

2. 請在【功能檢視】中,按兩下【HTTP 重新導向】。 

3. 於畫面出現的【HTTP 重新導向】頁面上,設定下列選項

  • 先核選【將要求重新導向至此目的地】,並在對應的輸入方塊中,輸入您要重新導向使用者的目的檔案名稱、目錄路徑或 URL。
  • 【將所有要求重新導向至確切的目的地 (而非目的地的相對位置)】:預設清除此選項,表示要轉送目的地是一個相對的目的地。例如,如果您設定重新導向的目的地是 http://www.abc.com/sales,而傳入的請求為 http://www.temp.com/test/default.aspx,IIS 就會將要求重新導向至 http://www.abc.com/sales/default.aspx,若核選此選項時則會重新導向目的地設為確切的目的地,一旦您將目的地設為確切的目的地時,所有傳入要求都會被重新導向至確切的目的地。
  • 【只將要求重新導向至此目錄 (不是子目錄) 中的內容】:設定重新導向的範圍僅限於本目錄,或者您也可以連同底下的子目錄請求一併重新導向。
  • 狀況碼:設定重新導向的方式-301、302或307。

4. 最後,請在【動作】窗格中,按一下【套用】以完成工作。
httpredirect
一旦透過IIS管理員完成HTTP重新導向後,您可以在目錄下的web.config檔案內看到了system.webServer新增了<httpRedirect>元素:

<configuration>
<system.webServer>
<httpRedirect enabled="true" destination="http://www.lij.com.tw/newapp" />
</system.webServer>
</configuration>

檢查或測試 HTTP重新導向

為了檢查HTTP重新導向的內涵並測試其正確性,您必需在瀏覽器上使用一些可以用來檢查HTTP標頭的免費附加元件,例如Firefox的 "live HTTP headers"或是IE的 "ieHTTPHeaders" 附加元件,下圖為作者在IE上使用的ieHTTPHeaders附加元件後,所看到的重新導向的HTTP標頭內容,首先IE瀏覽器向網站請求下載 http://www.lij.com.tw/oldapp/ 網頁內容,但由於此目錄已被網站管理員如上圖所示設定為302的重新導向處理,所以伺服器會回應給用戶端302狀態並於Location欄位內附上導向目的的新網址,因此IE瀏覽器必需向新目的網址發出新的請求以取得新目的的網頁內容。

httpredirect2