IIS HTTP 重新導向功能筆記
0 | 40,735 |
將 IIS 網站的特定網址導向其他網址,有幾種做法:
- UrlRewrite 模組
彈性高,支援複雜的轉換規則(可使用 Regular Expression 定義規則),能在使用者未察覺的情況下完成轉換,例如將 /product/book/computer 轉為 /product.aspx?zone=book&catg=computer,提供較友善的網址並增進 SEO。
但若轉址是因為網站或網頁搬家,需明白告知並建議使用者改用新網址,UrlRewrite 較不適用。 - JavaScript 或 HTML 標籤轉址
在舊網頁加上 location.href = "新網址" 或 <meta http-equiv="refresh" content="0;url=新網址" /> 將使用者導向新網址。缺點是每個舊址要留一個 HTML,瀏覽器需耗消資源載入 DOM 才執行轉址,也未明確告知客戶端應改用新址。 - 伺服器端轉址
即在 ASP.NET 呼叫 Response.Redirect() 或在 ASP.NET MVC return Redirect() / RedirectPermanet()。
原理是回傳 HTTP 301/302 告知瀏覽器永久或暫時改用新址。301 是宣告舊址作廢以後請改用新址,搜索引擎下回建立索引及計算排名時會以新址取代舊址;302 則是暫時改用新址,未來每次會先回舊址再轉向新址。HTTP 1.1 增加的 308/307 類似 301/302,差別在於只對 GET 導向,POST 時仍回舊址避免回傳資料遺失。
參考:HTTP Redirect 301, 302 區別及對SEO的影響 @ 符碼記憶
參考:MDN HTTP Response Status Codes - 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>
A study of how to use IIS to implement HTTP redirection, including: UrlRewrite, JS or http-equiv="refresh", Reponse.Redirect() and HTTP redirection module.
Comments
Be the first to post a comment