重定向

**URL 重新導向**（英語：URL redirection，中國大陸作**網域名稱轉址**，香港作**自動跳轉**，又叫**自動導向**、**網址重新導向**），是指當用者瀏覽某網址時自動將他帶到另一網址的技術。常用來將長網址轉成較短的網址，便於記憶；或用於遷移和更換網址。這種技術可藉由不同的統一資源定位符（URL）連結網頁。

## 目的

### 相似網域名稱

網站營運者可能會註冊拼字不正確的網域名，把它們導向到正確網址，防止瀏覽者打錯，如將 google.com 輸成 gooogle.com 或 googel.com；又如 example.com 和 example.net 兩者均會重新導向至像是 example.org 的單一網域或網頁。這技術不時用於保留其他同名的高級網域（TLDs），或是使真正的.edu 或.net 重新導向至更能辨識的.com 網域。

### 移動網站至新網域

為何重新導向網頁？

* 網站須改變其網域名。
* 作者移動其網頁至新網域名。
* 兩座網站結合。

藉由網域名稱轉址，過時網址可以轉到正確位址。這些連結可能來自其他尚未知道網域名稱改變的網站，或是儲存於使用者瀏覽器的書籤／我的最愛。

相同的道理套於搜尋引擎。它們不時會有舊或過時的網域名稱和連結，在它們的資料庫內，帶使用者到舊的網址。使用網域名稱轉址，瀏覽者最後會到達正確的頁面。另外，在下一次的「搜尋引擎通過」，搜尋引擎會偵測及使用新的網址。

### 記錄外送連結

大部份的網頁伺服器的存取記錄，儲存了有關瀏覽者來源和如何瀏覽網站的詳細資料，但是不會記錄瀏覽者由那些連結離開，這是因為瀏覽者的瀏覽器，不需要在瀏覽者按下外接連結時，與原來的伺服器溝通。

這個資訊可由多個途徑獲取。其中一個途徑涉及網域名稱轉址。連結可以轉到在原來的網域名稱的一個統一資源位址，它會重導向至真正目標，而不是直接連結至其他網站。這會增加一個請求至網頁伺服器，而這個多出來的請求，會在伺服器的存取記錄留下記錄，說明了那個連結曾被點擊。這個技術亦被一些公司網站採用，用以顯示「警告」頁面，指出內容是非該站內容和該站無關。這個技術有不足之處在於它會增加一個請求至原本的網頁伺服器，造成延遲。對於一些希望在自動轉址前，顯示「警告」頁面的網站，顯示警告訊息的時間長度是一個附加的延遲。

### 簡化網址

現時，網站工程師傾向在網址傳遞帶描述性的屬性，以表示資料的結構層次、命令結構、交易路徑（transaction paths）及會話（session）資訊。這使得網址雜亂無章，難以記憶。有些時候，網站工程師會簡化頁面的網址。所以網址改變後，內容也沒有改變。

### 局部地區的使用限制

一般情況下，中國大陸地區在域名代理網站使用域名管理時，都可以自行設定 A 記錄、URL 轉址等解析操作。

2009 年 12 月 28 日，中國歷史最久、規模最大的域名代理商萬網發出公告，稱落實工業和信息化部發出的《工業和信息化部關於進一步深入整治手機淫穢色情專項行動工作方案》（工信部電管【2009】672 號），依法打擊手機淫穢色情，防止違規網站用變換域名等手段逃避監管的行為，決定將於 2009 年 12 月 29 日下午 2:00 起緊急停止域名 URL 轉發服務。隨後，萬網又告知客戶，在已取得網站備案和獨立 IP 的情況下，使用者可以花費購買 URL 轉發服務，價格最低 100 元（人民幣）5 條 URL 轉發記錄。意味著原來捆綁在域名費裡、免費設定 URL 轉發的功能須單獨提出，變成收費服務。

目前，另一域名商新網也實施該項措施。

## 技術

### HTTP 頭轉址

HTTP 狀態碼的 3xx 重新導向有多種代碼方式，不同的代碼有其對應的意圖，主要分為：

* 300：Multiple Choices
* 301：Moved Permanently
* 302：Found
* 303：See Other
* 304：Not Modified
* 305：Use Proxy
* 306：(Unused)
* 307：Temporary Redirect

其中 301、302、307 最常見，301 代表永久轉址，對於搜尋引擎判定頁面改變有直接影響，302 代表暫時轉址，通常用於暫時修改頁面，之後會恢復網址時使用。在搜尋引擎優化，將錯的 302 轉址改成 301 轉址對網站排名有顯著作用。

使用 301 跳轉，搜尋引擎（如 Google 搜尋）會將原連結的大部分 link equity 轉移至新連結，原頁面（URL）可能從索引移除而不會出現在搜尋結果列表 (SERP)，改為索引轉到的新 URL 並出現在 SERP，且排名可能接近原頁面 URL。

使用 PHP 轉址到 http://www.example.com/。

或者使用 HTTP 回應頭 `Refresh` 來實現（`Refresh` 原本是用於 N 秒重新整理到指定 URL。）

### Apache mod\_rewrite

* Apache HTTP Server 的 mod\_alias 擴充

```
Redirect permanent /oldpage.html http://www.example.com/newpage.html
Redirect 301 /oldpage.html http://www.example.com/newpage.html
```

* Apache mod\_rewrite

```
RewriteEngine on
RewriteCond %{HTTP_HOST} ^([^.:]+\.)*oldsite\.example\.com\.?(:[0-9]*)?$ [NC]
RewriteRule ^(.*)$ http://newsite.example.net/$1 [R=301,L]
```

### HTML 的 Refresh Meta tag and HTTP refresh header

```
<html>
    <head>
        <meta http-equiv="Refresh" content="0; url=http://www.example.com/" />
    </head>
    <body>Hj
    </body>
</html>
```

### JavaScript redirects

```
window.location='http://www.example.com/';
```

### HTML 的 Frame redirects

```
<html>
    <frameset rows="100%">
      <frame src="http://www.example.com/">
    </frameset>
</html>
```

## 參見

* 全球資訊網
* 網域名稱

## 參考資料

## 外部連結

* Mapping URLs to Filesystem Locations （頁面存檔備份，存於網際網路檔案館）
* Paper on redirection spam (UC Davis) （頁面存檔備份，存於網際網路檔案館）
* Security vulnerabilities in URL Redirectors （頁面存檔備份，存於網際網路檔案館） The Web Application Security Consortium Threat Classification
* 301 Redirects for moved pages using .htaccess （頁面存檔備份，存於網際網路檔案館）
* 301-redirect.info, site summarizing redirection methods in Apache, PHP, ASP, JPs or ColdFusion programming
* Redirecting your visitors to your preferred domain using 301 permanent redirects — rationale and mod\_rewrite/PHP/ASP.NET implementations