今天 XX 群裡的一位朋友問小編更換域名後的 WordPress 網站怎麼做 301 重定向啊,小編蛋疼了,為啥總是有人來問這類 XXX 的問題呢,所以小編直接甩了一句自己百度谷歌去。過了幾分鐘這位仁兄又來,還說百度谷歌來的 301 重定向程式碼都不管用。 X 了個 X 怎麼可能沒用呢!小編實在無語了只好自己谷歌了一段程式碼丟給這位仁兄,這位仁兄回了句,這程式碼就是他現在用的,只能把域名重定向過去,而所有的舊頁面連結卻沒有正確的定向到新的連線上。小編試了下果然如此,只是做了主域名的重定向,而沒有正確把其他頁面都定向到新域名上。好吧繼續百度谷歌,發現搜出來的程式碼基本都大同小異,根本沒有一個正確的將整站連結都 301 重定向的程式碼。沒辦法只好自己動手了,首先在根目錄下新建一個.htaccess 加入一下程式碼:
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
以上程式碼的作用是將所有請求都轉發給 index.php 來處理,當然你使用其它檔名也行,然後再 index.php 中加入以下程式碼:
<?php
$the_host = $_SERVER['HTTP_HOST'];//取得進入所輸入的域名
$request_uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '';//判斷域名後面的請求部分
if($the_host !== 'weixiaoduo.com')//weixiaoduo.com 是新域名
{
header('HTTP/1.1 301 Moved Permanently');//發出 301 狀態碼
header('Location: http://www.weixiaoduo.com'.$request_uri);//跳轉到我的新域名地址
exit();
}
?>
這樣就可以將所有舊域名上的連結重定向到新域名上了,另外提醒下使用此方法做 301 重定向時必須新建一個空間或者單獨的目錄來單獨的做 301 重定向,如果是使用網站空間同一個空間並且在同一目錄的話會造成伺服器錯誤導致網站無法訪問。
程式碼演示:隨便在本站找個可以訪問的頁面在域名前面加上 www 就可以看到效果了。
(題外話:百度時無意中發現一個帖子,發帖的說他花了一天的時間把舊域名上的連結都重定向到新域名上了,寫的.htaccess 檔案足足有 10 多 MB 大小,估計這位發帖的仁兄是一條連結一條連結的重定向吧,笑死了 (*^__^*)…不知道他哪來的毅力。)
2013.8.7 更新:今天有個童鞋問他用的是 win 主機那麼如何來實現全站 301 轉跳呢?實現方法:使用 httpd.ini 代替.htaccess 將請求轉發給 index.php
程式碼如下:
[ISAPI_Rewrite] RewriteRule ^/$ /index.php [L] RewriteRule /(.*) /index.php/$1 [L]
索性把 nginx 的程式碼也貼出來:
location / {
index index.html index.php;
if (-f $request_filename/index.html){
rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php){
rewrite (.*) $1/index.php;
}
if (!-f $request_filename){
rewrite (.*) /index.php;
}
}
將以上程式碼加入到 nginx.conf 檔案的 Server 段內。
所有不同的 web 環境下的第一步驟程式碼都不一樣,但是 index.php 的程式碼不變。 (PS:不一定是使用 WordPress 的朋友才可以使用這種方法來做 301 重定向,任何程式都可以噢,但是必須要伺服器支援 php 才可以。)