本篇介紹如何在伺服器端設定301的轉址,請依主機所使用的「HTTP伺服器」選擇使用Apache方法;或是NGINX方法設置。

如果你是使用WordPress,不想動到程式、並且不介意安裝個小外掛,建議可以使用Simple 301 Redirects來處理即可,此篇下方有使用的教學:

究竟什麼是301轉址?告訴搜尋引擎你家的新地址!

設定.htaccess 301轉址-適用Apeach

在你的網站根目錄下找到.htaccess,如果沒有就自己新增一個,這個檔案將能寫一些程式碼來控制Apeach的行為,像是301轉址,你可以在.htaccess中寫入這樣:

同網域下之站內301轉址

EX:把oldfile.htm 轉址到 newfile.htm
Redirect 301 /oldfile.htm /newfile.htm

301轉到別的網域去

Redirect 301 /oldfile.htm http://example.net/newfile.htm

將舊網域301轉到新網域

RewriteEngine on
RewriteCond %{HTTP_HOST} ^example.com [NC,OR]
RewriteCond %{HTTP_HOST} ^www.example.com [NC]
RewriteRule ^(.*)$ http://example.net/$1 [L,R=301,NC]

在www以及沒www的版本中,選擇只恆用其中一個網址

每個網域基本上都帶有www以及沒有www的版本,並且都是連結到首頁,但在搜尋引擎眼裡,卻是兩個不同的網站。而為了要對SEO優化專心在同一個網域上,常常站長們會只選擇一個來做使用,另一個則當有人連線時就做301轉址到另一個去。

永遠使用有www的網址

RewriteEngine on
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301,NC]

永遠使用沒有www的網址

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.example.com [NC]
RewriteRule ^(.*)$ http://example.com/$1 [L,R=301,NC]

Apeach轉址可能遇到的錯誤

如果在加入程式碼後出現轉換錯誤的話,可能是Apeach在Rewrite下出現錯誤,請在RewriteEngine on上方再加入一行程式碼
Options +FollowSymLinks

舉一個為例,固定使用www的轉址將會變為:
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301,NC]

 

實際使用時,記得將案例中的example.com換作是自己的網域噢!

.htaccess還可以控制許多Apeache,但很多程式實在很難熟記,這邊推薦一個網站只要你填入你想做的行為——像是301轉址、甚至阻擋某IP進入網站,會自動幫你生成.htaccess的程式碼:

.htaccess線上程式生成器

 

設定nginx.conf來做301轉址 – 適用Nginx

舊網址301到新網址

第一步是打開nginx.conf檔案,有些分比較細的主機,關於你網站的網址conf檔不會寫在主nginx.conf裡,而是寫在以你網域為名的conf檔中。
EX: make9.tw.conf,修改以下部分:

 

server
{
listen 80;
server_name www.make9-new.tw www.make9-old.tw;
if ($host ~* www.make9-old.tw){
rewrite ^/(.*)$ http://www.make9-new.tw/$1 permanent;
}
index index.html index.htm index.php
}

上述例子是你從舊網址改為新網址的方式,也同樣適用於有www的網址和沒www的網址你只想永遠用其中一個,那就將另一個301永遠轉址到另一個即可。

WWW和沒有WWW擇一網址使用

server
{
listen 80;
server_name www.make9.tw make9.tw;
if ($host ~* www.make9.tw){
rewrite ^/(.*)$ http://make9.tw/$1 permanent;
}
index index.html index.htm index.php
}

此例是把所有www.make9.tw轉到make9.tw,就如同現在你所瀏覽的的make9.tw主站一樣(可以試著輸入有www的版本試試實際效果!),將範例中的make9改為你的網址就可以套用在自己的網站上嘍!

302轉址

302轉址並非此次討論範圍,但這邊需要注意的是,如果:

rewrite ^/(.*)$ http://www.make9-new.tw/$1 permanent;

改成

rewrite ^/(.*)$ http://www.make9-new.tw/$1 redirect;

將permanent改為redirect的話一樣會有同樣的轉址效果,訪客不會感覺到任何差異,但在SEO上的意義則會變為「302轉址」,而非「301轉址」。兩個的差別在於301為「永久轉址」,302則為「暫時轉址」,這部份別搞混了!

適用於修改階層的301轉址方法

上面的方法是只適用在你Host的網址(基本上就是主網址),假如你想修改的是網址的結構階層呢?那就需要如下這樣寫:

server
{
listen 80;
server_name www.make9.tw make9.tw
rewrite ^/about/year/(.*)$ https://make9.tw/year/$1 permanent;
index index.html index.htm index.php
}

請注意rewrite開頭的那行程式,假如連入的網址為:
http://www.make9.tw/about/year/2018

將會301轉址為:
http://www.make9.tw/year/2018

將about階層給去掉了,稍微理解對照一下rewrite那行程式,將網址改為自己的網址,你就可以變化出你想要的轉址方式。

最後修改完成記得重啟你的nginx:
service nginx restart

這樣就完成了。