今天 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 才可以。)