本篇介紹如何在伺服器端設定301的轉址,請依主機所使用的「HTTP伺服器」選擇使用Apache方法;或是NGINX方法設置。
如果你是使用WordPress,不想動到程式、並且不介意安裝個小外掛,建議可以使用Simple 301 Redirects來處理即可,此篇下方有使用的教學:
內容索引
設定.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/\ [L,R=301,NC]
在www以及沒www的版本中,選擇只恆用其中一個網址
每個網域基本上都帶有www以及沒有www的版本,並且都是連結到首頁,但在搜尋引擎眼裡,卻是兩個不同的網站。而為了要對SEO優化專心在同一個網域上,常常站長們會只選擇一個來做使用,另一個則當有人連線時就做301轉址到另一個去。
永遠使用有www的網址
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/\ [L,R=301,NC]
永遠使用沒有www的網址
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.example.com [NC]
RewriteRule ^(.*)$ http://example.com/\ [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/\ [L,R=301,NC]
實際使用時,記得將案例中的example.com換作是自己的網域噢!
.htaccess還可以控制許多Apeache,但很多程式實在很難熟記,這邊推薦一個網站只要你填入你想做的行為——像是301轉址、甚至阻擋某IP進入網站,會自動幫你生成.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/\ permanent;
}
index index.html index.htm index.php
}
上述例子是你從舊網址改為新網址的方式,也同樣適用於有www的網址和沒www的網址你只想永遠用其中一個,那就將另一個301永遠轉址到另一個即可。
舊網址301到新網址(方法二)
server {
listen 80;
listen [::]:80;
server_name make9-old.tw make9-old.tw;
rewrite ^ $scheme://make9-new.tw$request_uri? permanent;
}
return 301轉址方法
剛剛上面的方法適合針對同個網站中,網址的變動,如果是整個網站搬家則可以使用return語法來做301轉址,會比較直覺:
return 301 https://make9.tw$request_uri;
WWW和沒有WWW擇一網址使用
server
{
listen 80;
server_name www.make9.tw make9.tw;
if ($host ~* www.make9.tw){
rewrite ^/(.*)$ http://make9.tw/\ permanent;
}
index index.html index.htm index.php
}
此例是把所有www.make9.tw轉到make9.tw,就如同現在你所瀏覽的的make9.tw主站一樣(可以試著輸入有www的版本試試實際效果!),將範例中的make9改為你的網址就可以套用在自己的網站上嘍!
將 http 強制轉為 https
server {
listen 80;
listen [::]:80;
server_name make9.tw www.make9.tw;
rewrite ^ https://make9.tw$request_uri? permanent;
}
這方法也適用一些其他應用,像是多個網址要連入同一個網站,但只想要用其中一個網址當代表
302轉址
302轉址並非此次討論範圍,但這邊需要注意的是,如果:
rewrite ^/(.*)$ http://www.make9-new.tw/\ permanent;
改成
rewrite ^/(.*)$ http://www.make9-new.tw/\ 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/\ 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
這樣就完成了。
在這裡,所有的學習內容都是免費的。
如果這讓你感到滿意,一杯咖啡能讓我們走得更遠。
嗨!歡迎來到造九 😊 打聲招呼吧!