詳解301重定向及實現方法

来源:http://www.cnblogs.com/shouce/archive/2016/02/25/5215701.html
-Advertisement-
Play Games

一、什麼是301重定向 301重定向(或叫301跳轉、301轉向)是用戶或搜索引擎蜘蛛向網站伺服器發出訪問請求時,服務返回的HTTP數據流中頭信息(header)部分狀態碼的一種,表示本網址永久性轉移到另一個地址。其他常見的狀態碼還包括:200(表示一切正常);404(網頁不存在);302(臨時性轉


一、什麼是301重定向

  301重定向(或叫301跳轉、301轉向)是用戶或搜索引擎蜘蛛向網站伺服器發出訪問請求時,服務返回的HTTP數據流中頭信息(header)部分狀態碼的一種,表示本網址永久性轉移到另一個地址。其他常見的狀態碼還包括:200(表示一切正常);404(網頁不存在);302(臨時性轉向);500 (內部程式錯誤);

  除了301轉向,網址轉向還有其他方法,如302轉向、JavaScript轉向、PHP/ASP/CGI程式轉向、Meta Refresh等。

  301重定向對搜索引擎優化具有不可替代的作用。用301重定向鞏固規範版本的URL,重拾權重,防止搜索結果的重覆內容。從搜索引擎優化角度出發,301重定向是網址重定向最為可行的一種辦法。

二、什麼情況下使用301重定向

  網站改版經常需要用到301重定向:如網站更換功能變數名稱,改變網頁目錄結構,網頁被移到一個新地址,網頁擴展名改變,如因需要把 .php 改成 .html。在這種情況下,如果不做重定向,則用戶收藏夾或搜索引擎資料庫中舊地址只能讓訪問客戶還會得到一個404頁面錯誤信息,訪問流量白白喪失。使用301重定向不僅能使頁面實現自動跳轉,告訴用戶你已經換了新的網址了。同時也告訴搜索引擎,這個才是真正的網址,搜索引擎只對重定向後的新網址進行索引,同時又會把舊地址權重如數轉移到新地址下,從而不會讓網站的排名因為網址變更而受到影響。

  一個網站註冊了多個功能變數名稱,需要通過301重定向讓訪問這些功能變數名稱的用戶自動跳轉到其中一個主功能變數名稱。這樣做是為了避免造成大量複製內容,而遭到搜索引擎懲罰。因為在搜索引擎看來,每個功能變數名稱都是一個獨立的站,多個功能變數名稱指向同一站,會被認定為站點雷同,內容複製,輕則不收錄進入沙盒期,重則直接被K。

  實現網址規範化也需要301重定向

  假設有下麵幾個網址:

  http://www.admin10000.com/index.html

  http://admin10000.com

  http://admin10000.com/index.html

  都做301重定向到 http://www.admin10000.com(選定的規範化網址),搜索引擎就知道http://www.admin10000.com 是規範化網址,而且會把上面列的網址權重傳遞集中到規範化網址。

  目前Google會傳遞大部分權重,但不是百分之百權重。百度會傳遞所有權重。Google對301的識別、反應、完成權重傳遞,需要1~3個月時間。百度對301處理則比較保守,新舊URL會同時存在於資料庫很長時間。

三、Apache伺服器實現301重定向

  如果網站使用LAMP(Linux + Apache + MySQL + PHP)主機,可以利用Apache的mod_rewrite對URL進行重寫或重定向。需要以下幾步:

  1、首先確保開啟了mod_rewrite功能。

  用文本編輯器打開Apache安裝目錄\conf\httpd.conf,找到“#LoadModule rewrite_module modules/mod_rewrite.so”這行,去掉前面的“#”;

  繼續查找“AllowOverride None”,修改為“AllowOverride All”;

  然後,重啟Apache即可。

  2、在你需要URL重定向的網站根目錄下放一個.htaccess文件,文件名是.htaccess,Windows下不能直接建立,你可以用記事本另存為。

  3、在.htaccess中通過正則表達式重定向到需要的頁面。示例如下:

  將不帶www的頂級功能變數名稱301重定向到帶www的功能變數名稱

    Options +FollowSymLinks
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^admin10000.com [NC]
    RewriteRule ^(.*)$ http://www.admin10000.com/$1 [L,R=301]

  將頁面301重定向到另外一個頁面

    Options +FollowSymLinks
    RewriteEngine On
    RewriteRule ^/oldpage.html$ /newpage.html[NC,L,R=301]

四、IIS伺服器下做301重定向設置方法

  示例:將admin10000.com 跳轉到 www.admin10000.com

  1、新建一個站點,對應目錄如d:\site。該站點主要用於轉向,目錄可以是空的,不需要任何文件。然後為該站點綁定要跳轉的功能變數名稱admin10000.com,如圖:

  2、在IIS中選中剛纔我們建立的站點,右鍵,屬性,主目錄,選擇重定向到,輸入另一個綁定好www.admin10000.com 功能變數名稱的網站地址(這個網站下存放有網站內容)。輸入的地址是:http://www.admin10000.com$S$Q,同時註意選中下麵的"資源的永久重定向選項" 和 “上面輸入的準確URL” 這2個選項。如下圖:

  對於$S$Q字元,這裡解釋一下:

  $S 將請求的URL的尾碼傳遞給新的URL。尾碼是用重定向的URL 代替之後,初始URL 中所保留的部分。

  如果未選中 "上面輸入的準確URL" 選項,則結果目標URL 的名稱將具有所請求文件的名稱(作為文件夾名稱)以及文件名本身。

  $Q 將初始URL中的參數(如 querystring 參數)傳遞至新的 URL,包括問號(?)。

  如果不加上 $S$Q 字元的話,內頁的301都會跳轉到首頁,加上$S$Q字元的目的就是內頁也能準確的跳轉到新功能變數名稱的對應內頁。

  好了,這樣就完成了301永久重定向的設置,設置好之後最好能測試一下301重定向是否成功。站長工具的HTTP狀態工具(http://tool.chinaz.com/pagestatus/)即可查到,如果查到的返回狀態是301就說明你已經成功了。

五、使用ISAPI_Rewrite實現IIS的301重定向

  ISAPI_Rewrite是用於IIS的第三方URL重寫組件。它是基於正則表達式的,類似Apache mod_rewrite功能,不僅可以實現URL重寫,還可以實現301重定向。

  ISAPI_Rewrite組件有免費版(Lite)以及商業版(Full),免費版只支持全局httpd.conf 配置,不能對每個站點進行單獨設置,而商業版可以讓每個站點自定義URL重寫規則,只要將httpd.ini 放在站點根目錄下就能生效。

  請使用 ISAPI_Rewrite 2.x 或者 最新的3.0 版本(它相容Apache的mod_rewrite的語法),而較早的1.x 版本不支持301重定向功能。

  下麵給出示例:

  1. 將不帶www的頂級功能變數名稱301重定向到帶www的功能變數名稱

# ISAPI_Rewrite 2.x 版本
[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
RewriteCond Host: ^admin10000\.com$
RewriteRule (.*) http://www.admin10000.com$1 [I,RP]
# ISAPI_Rewrite 3.0 版本
[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
RewriteCond %{HTTP:Host} ^admin10000\.com$
RewriteRule (.*) http://www.admin10000.com$1 [NC,R=301]

  2. 不同功能變數名稱之間的301轉向

# ISAPI_Rewrite 2.x 版本
[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
RewriteCond Host ^www\.test10000\.com$
RewriteRule (.*) http://www.admin10000.com$1 [I,RP]
# ISAPI_Rewrite 3.0 版本
[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
RewriteCond %{HTTP:Host} ^www\.test10000\.com$
RewriteRule (.*) http://www.admin10000.com$1 [NC,R=301]

  3. 將頁面301重定向到另外一個頁面

# ISAPI_Rewrite 2.x 版本
[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
RewriteRule ^/oldpage.html$ /newpage.html[I,O,RP,L]
# ISAPI_Rewrite 3.0 版本
[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
RewriteRule ^/oldpage.html$ /newpage.html[NC,L,R=301,O]

六、在網頁後臺程式中實現301重定向

  如果頁面是ASP/PHP/JSP/ASP.NET 可以再後臺代碼中做301重定向。

  但是我個人不推薦這樣,因為在伺服器上做301跳轉是在你的頁面執行之前就開始跳轉,效率高。而程式代碼中做301,要為每個頁面頭部加轉向代碼,比較麻煩。

  示例如下:

  1、PHP下的301重定向

<?
  Header("HTTP/1.1 301 Moved Permanently");
  Header("Location: http://www.admin10000.com");
?>

  2、ASP下的301重定向

<%@ Language=VBScript %>
<%
  Response.Status = "301 Moved Permanently"
  Response.AddHeader "Location", "http://www.admin10000.com"
%>

  3、ASP .NET下的301重定向

<script runat="server">
private void Page_Load(object sender, System.EventArgs e)
{
      Response.Status = "301 Moved Permanently";
      Response.AddHeader ("Location", "http://www.admin10000.com");
}
</script>

  4、JSP下的301重定向

<%
  response.setStatus(301);
  response.setHeader("Location", "http://www.admin10000.com");
  response.setHeader("Connection", "close");
%>

  提示:如果返回報頭中只有Location,但沒有明確提到狀態代碼時,就意味著一個302臨時重定向。請謹記於心。例如下麵都是302重定向:

  PHP 下的302重定向

<?
   php header("Location: http://www.admin10000.com");
?>  

  Asp 下的302重定向

<%
   Response.Redirect "http://www.admin10000.com/"
%>

  ASP.NET 302重定向

<script runat="server">
  private void Page_Load(object sender, System.EventArgs e)
  {
     Response.Redirect("http://www.admin10000.com");
  }
</script>

  JSP 下的302重定向

<%
    response.sendRedirect("http://www.admin10000.com");
%>

  總結:301重定向是一種對搜索引擎最友好的網址轉向方法。在眾多重定向技術中,301永久性重定向是最為安全的一種途徑,也是極為理想的一款解決方案。無論是URL永久性改變,還是多種格式URL規範化都離不開301重定向。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 新年耽誤了不少時間,好久沒認真的坐下來學習了,新年也快完了,又要開始正式學習了,按著視頻教學學習,用了一天的時間,學習了下簡單的變數及其相關的輸入輸出和應用,學了幾種最基本的類型: int(整型) char(字元型) string(字元串類型)double(雙精度浮點數) decimal(貨幣值類型
  • 從老馬那摳出點東西,由於是個視頻,沒有文檔資料,遂觀後做下總結,以便以後自己遇到優化的時候可以考慮考慮這些方面,下麵我將總結的寫出來,供大家分享,可能有不對的地方希望指出 一.SOA服務的粒度的把控: 建議:服務在設計時應該是自上而下或者在服務開發之前做相應的調整,儘量的保證服務粗粒度化,這樣就能減
  • C#設置系統日期和時間的代碼分享,使用C#代碼設置系統日期和時間的程式開發步驟如下: (1)為了使用DllImportAttribute類,需要引入命名空間: using System.Runtime.InteropServices; (2)自定義類SetSystemDateTime用於設置系統時間
  • 原文地址:http://www.manongjc.com/article/491.html const是用於類成員常量的定義了,定義之後不可改,而define我們定義的是全局常量了, 這樣我們在其它地方訪問但不能改變了,具體還有一些細節我們下麵給各位列出來吧 註意:define不能定義在類中,而co
  • 原文地址:http://www.manongjc.com/java_example/java_method.html Java方法重載 Java輸出數組元素 Java漢諾塔演算法 Java斐波那契數列 Java階乘 Java方法覆蓋 Java instanceOf 關鍵字用法 Java break 關
  • #include <iostream> int main(int argc, char** argv) { int i = 0; int *p = &i; int **pp = &p; **pp = 100; printf("%d\n",i); printf("i的地址值:%p\n",&i); pr
  • #include <iostream> int main(int argc, char** argv) { char *s[10];//指針數組 char (*s1)[10];//數組指針 //前面一個是 指針數組,也就是 指針是形容詞用來修飾數組,可見,重點落在,這是一個數組上。 //那麼數組的元
  • HandlerMapping將url分發到對應的handler處理器,並添加攔截器. 實現上,經典的介面+抽象類+具體演算法實現.
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...