底下範例幾個有關在 . htaccess中站長們比較會需要用的 301 Redirect的寫法,至於要怎麼做,我想從最簡單的步驟開始講起好了,. htaccess檔案在哪裡,要怎麼改??
一般使用 Unix/Linux主機商(必須使用的是apache)應該都允許你有自己的這個 . htaccess檔案,它通常放在你的根目錄下面,類似下圖 So…你可以在你的主機根目錄下(public_html)看到這個檔案 . htaccess (小數點後無空格喔),如果沒有的話,請自己新建立一個,權限請設為 644即可,我的 cocolike.com因為是 addon domain,所以我的檔案在 cocolike的目錄下
接下來說明我的範例和需求
1. URL規範化及首頁統一導向
將 http://www.cocolike.com,http://www.cocolike.com/index.html,http://cocolike.com/index.html 都指向唯一的一個 http://cocolike.com
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.cocolike.com$ [NC]
RewriteRule ^(.*)$ http://cocolike.com/$1 [R=301,L]
rewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/
rewriteRule ^index\.html$ http://cocolike.com/ [R=301,L]
首先 RewriteEngine on,綠字的部分會將所有指向 http://www.cocolike.com 的需求都用 301 redirect的方法轉向到 http://cocolike.com 去
紅字的部分則會將你目錄下的 index.html導到 /目錄下,意即 http://www.cocolike.com/index.html 和http://cocolike.com/index.html 都會轉向到 http://cocolike.com 去
要導向到有 www 的話,把綠字的部分改成如下即可
RewriteCond %{HTTP_HOST} ^cocolike.com$ [NC]
RewriteRule ^(.*)$ http://www.cocolike.com/$1 [R=301,L]
2. 主網域的子網域導向 addon domain
因為我的 cocolike.com是 addon domain,所以我的主網域會自動產生 cocolike.com 的子網域對照到我的這個網域,假如說我的主網域是 www.maincocolike.com ,意思是當我打入 http://cocolike.maincocolike.com 時一樣讀的到我 http://cocolike.com 的網頁內容,其實會跟我的 cocolike.com重複了,因此我必須將子網域直接用 301 Redirect導向我的 domain
RewriteEngine on
RewriteCond %{HTTP_HOST} ^cocolike.maincocolike.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.cocolike.maincocolike.com$
RewriteRule ^(.*)$ http://cocolike.com [R=301,L]
請先 RewriteEngine on,紅字的部分會將我的有 www和沒有www的 http://cocolike.maincocolike.com 301導向我的 http://cocolike.com 去,網頁才不會重覆被索引認為是兩份內容
3. 子網域轉向到一級目錄下
一樣的,我原本愛設一些子網域名稱,例如 forum.cocolike.com,blog.cocolike.com等等,但是其實你會發現,子網域不會帶給你太多的好處,你如果不是甚麼大得不得了的網站,使用一級的目錄不會比較糟糕,更何況,當你設了子網域之後,如果你不設定其他的項目,其實用目錄的方式也讀的到子網域所有的內容,變成兩個網域都有相同的內容喔(可參考這篇文章 二级域名还是一级目录?),所以這裡建議是可以把子網域拿掉的 !!
那子網域 301轉向到一級目錄下呢?? 我把 forum.cocolike.com用 301轉向 cocolike.com/forum/
RewriteEngine on
RewriteCond %{HTTP_HOST} ^forum.cocolike.com$ [NC]
RewriteRule ^(.*)$ http://cocolike.com/forum/ [R=301,L]
RewriteEngine on,紅字的部分會將我的 forum.cocolike.com 301導向我的 cocolike.com/forum/去
4. 主網域的一級目錄導向 addon domain
問題來了,我的主網域不是也有這問題嗎?? 如果我要將主網域的 http://www.maincocolike.com/cocolike/ 一級目錄和 http://cocolike.com/ 這個網址是同樣的一份內容的問題加以解決,那我必須將主網域的 cocolike目錄導向我的 cocolike.com網域去,對吧,但是這個 . htaccess必須到上一層根目錄(主網域的根目錄)去改那一個才對囉,不是改我現在 cocolike的目錄的那個 . htaccess
RewriteEngine on
RewriteCond %{HTTP_HOST} ^.*$
RewriteRule ^cocolike/?$ http://cocolike.com/$1 [R=301,L]
一樣 RewriteEngine on,綠字的部分會把我主網域 http://www.maincocolike.com/cocolike 的目錄 301導向我的 http://cocolike.com 去
5. 一級目錄的首頁統一導向
那我的 http://cocolike.com/blog 呢?? 是否 http://cocolike.com/blog/index.html 也必須導向 http://cocolike.com/blog/ ,其實我的 blog有外掛在幫我做這件事情,不過還是寫一下相關的敘述該怎麼寫吧
RewriteEngine on
RewriteCond %{THE_REQUEST} ^[AZ]{3,9}\ /blog/index.html\ HTTP/
RewriteRule ^blog/index\.html$ http://cocolike.com/blog/ [R=301,L]
ㄟ,如果是同一個 . htaccess檔案中,RewriteEngine on只要在最前面寫一遍就可以了,不要一直寫喔^^
6. 永久導向到另一個網域
最後,如果我網站很大,怕別人混淆了我的網域名稱,又申請了一個 cocolike.net的話,總不要又被認為是兩份文件吧,將一個 cocolike.net網址永久轉向到就有的 cocolike.com網址:
是將 http://cocolike.net 定向到 http://cocolike.com,請在你的 cocolike.net的根目錄夾內的 . htaccess加入這一行:
Redirect permanent / http://cocolike.com/
即可,同時也是告訴搜索引擎這兩個域名的關係了。
說明完了,有的動作你的主機商提供的介面例如 CPanel可以幫你做掉,所以你也可以不用手動加到 . htaccess去啦 !!!
本文內容為原創作品(cocolike.com),引用者請按上方引用 link或通知我一聲,請勿全文轉貼,謝謝 !!

