IIS HTTP 重新導向功能筆記

將 IIS 網站的特定網址導向其他網址,有幾種做法:

  1. UrlRewrite 模組
    彈性高,支援複雜的轉換規則(可使用 Regular Expression 定義規則),能在使用者未察覺的情況下完成轉換,例如將 /product/book/computer 轉為 /product.aspx?zone=book&catg=computer,提供較友善的網址並增進 SEO。
    但若轉址是因為網站或網頁搬家,需明白告知並建議使用者改用新網址,UrlRewrite 較不適用。
  2. JavaScript 或 HTML 標籤轉址
    在舊網頁加上 location.href = "新網址" 或 <meta http-equiv="refresh" content="0;url=新網址" /> 將使用者導向新網址。缺點是每個舊址要留一個 HTML,瀏覽器需耗消資源載入 DOM 才執行轉址,也未明確告知客戶端應改用新址。
  3. 伺服器端轉址
    即在 ASP.NET 呼叫 Response.Redirect() 或在 ASP.NET MVC return Redirect() / RedirectPermanet()。
    原理是回傳 HTTP 301/302 告知瀏覽器永久或暫時改用新址。301 是宣告舊址作廢以後請改用新址,搜索引擎下回建立索引及計算排名時會以新址取代舊址;302 則是暫時改用新址,未來每次會先回舊址再轉向新址。HTTP 1.1 增加的 307/308 類似 301/302,差別在於只對 GET 導向,POST 時仍回舊址避免回傳資料遺失。
    參考:HTTP Redirect 301, 302 區別及對SEO的影響 @ 符碼記憶 
  4. IIS HTTP 重新導向模組
    效果同伺服器端轉址,好處是只需設定 web.config 不用寫成網頁,且一條設定即可適用整個子目錄。

來看看 HTTP 重新導向怎麼設定。使用前需先確定 IIS 有安裝 HTTP 重新導向(HTTP Redirection):

接著在 IIS 管理員中找到要導向的資料夾進行設定:

套用設定後,IIS 會在該資料夾建立如下的 web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <httpRedirect enabled="true" destination="/NewPlace" 
          exactDestination="false" childOnly="true" httpResponseStatus="Found" />
    </system.webServer>
</configuration>

關於設定介面中的選項,我用以下的資料夾結構示範,假設我們在 Moved 指定重新導向 /NewPlace。


  • 將所有要求重新導向至確切的目的地(而非目的地相對位置)
    exactDestination="true/false"
    勾選時,/Moved/test.html、/Move/SubFolder/test.html 都會被導向 /NewPlace
    如未勾選,/Moved/test.html 導向 /NewPlace/test.html、/Move/SubFolder/test.html 導向 /NewPlace/SubFolder/test.html
  • 只將要求重新導向至此目錄(不是子目錄)中的內容
    childOnly="true/false"
    勾選時,只有 /Moved/test.html 會被導向新址,更下一層子目錄的 /Move/SubFolder/test.html 不會被導向仍可瀏覽

除了透過 IIS 管理介面,我們也可直接修改 web.config 設定重新導向規則,<httpRecdirect> 參數選項可參考官方文件:HTTP Redirects -httpRedirect- - Microsoft Docs 另外,<httpRedirect> 還有一些進階應用,例如:ASP 升級 ASPX 時,將所有 *.asp 導向首頁。參考

以上的做法有個小缺點 - 必須為舊網址建立資料夾放置 web.config,雖然視覺化顯示哪些地方存在舊網址避免誤用是好事,但如果你不喜歡新專案冒出一堆無用資料夾,可以試試這招 - 在根目錄的 web.config 中用 <location path="舊址"> 包覆 <httpRedirect> 宣告,就不必實際建立資料夾或檔案也能針對特定路徑進行轉址。

  <location path="Moved">
    <system.webServer>
      <httpRedirect enabled="true" destination="/NewPlace" />
    </system.webServer>
  </location>
歡迎推文分享:
Published 10 May 2018 07:06 AM 由 Jeffrey
Filed under: ,
Views: 2,388



意見

沒有意見

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<May 2018>
SunMonTueWedThuFriSat
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789
 
RSS
創用 CC 授權條款
【廣告】
twMVC

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication