.htaccess 能夠幫助我們透過簡單的幾行程式碼,就能輕鬆的寫入 Redirect 規則,實現 301 或 302 的轉址,讓老舊的網址能夠自動跳轉至指定的新網址,不怕讓使用者看到錯誤畫面而造成使用者體驗不佳的情況了。
至於何時該使用 301 與 302 重定向跳轉,以及他們對 SEO 排名的影響,可以參考這篇:3分鐘了解 301 與 302 Redirect 重定向之間的差異與它們如何影響網站 SEO 排名
通常,除了透過 .htaccess 檔案建立規則來實現網址跳轉功能之外,我們也能透過 CloudFlare 的規則來建立 Forwarding URL,實現自動轉址。
可惜的是,免費帳戶只能提供 3 條免費的規則建立,因此若你有大量的舊網址需要遷移時,使用 .htaccess 的方式建立 Redirect 規則就是一個好的選擇。
因此,今天才介紹一些常見與常用的 .htaccess Redirect 規則,讓你能夠快速建立 Redirect 跳轉。
文章目錄
.htaccess 文件簡介
.htaccess 是一個標準的 Apache Web Server 的配置文件,用來控制目錄與所有的子目錄。一般常見基於 Linux 建立的網站,通常都會使用 Apache 進行託管,因此在系統環境安裝完成後,你可以看到預設就已經存在 .htaccess 的文件。
假如你是使用 WordPress、Joomla、Drupal…等等的 Content Management System(CMS),相信你對這個 .htaccess 檔案一定不陌生,因為在這些內容管理系統預設都是使用 .htaccess 來控制大部分的系統執行命令。
.htaccess 檔案可以寫入伺服器的特殊指令,用來指定網域與 IP 的對應,此外,.htaccess 文件常見的做法還有用來自動配置使用者重定向至指定的URL網址,甚至將整個網域進行重定向的跳轉。
簡單來說,.htaccess 能做到的事情非常多,而今天我們就針對 .htaccess 的一項好用功能「實現 Redirect 重定向」功能來做詳細的介紹。
.htaccess 常見的 301/302 重定向規則
如何重定向(301 Redirect)單個頁面?
跳轉邏輯
代表將 https://example.com/new.php 使用 301 轉址方式轉至 https://example.com/new.html。
如何重定向(301 Redirect)整個網站/網域到另一個新的網站/網域?
跳轉邏輯
代表將目前網域/網站,整個透過 301 轉址方式跳轉至 https://newsite.com/,假設目前網域是 https://example.com/,那麼整個網域都會以 301 轉址方式轉至 https://newsite.com/。
如何重定向(301 Redirect)整個網站/網域到子目錄?
跳轉邏輯
代表將目前網域/網站,透過 301 轉址方式,將網站轉移至 /subfolder/ 這個子目錄當中。
如何重定向(301 Redirect)子目錄到另一個新的網站?
跳轉邏輯
代表將舊的子目錄,透過 301 轉址方式,將該子目錄重定向至新的網址當中。
如何只重定向(301 Redirect)後綴檔案編碼,保留前面所有檔案名稱?
跳轉邏輯
舉例來說,當你的網站改變系統,原本網頁的編碼為:https://example.com/article-1.php,透過這個重定向規則之後,就會跳轉成:https://example.com/article-1.html。
如何使用重寫規則從舊網域重定向(301 Redirect)至新網域?
如何使用重寫規則從 non-www 子網域重定向(301 Redirect)指定至 www 子網域?
如何使用重寫規則從 non-www 網域重定向(301 Redirect)至帶有子目錄的 www 網域?
如何使用重寫規則從舊網域重定向(Redirect)至整個新網域(包含完整路徑與所有 query 查詢字串參數)?
如何使用重寫規則從擁有子目錄的舊網域當中,重定向(Redirect)至沒有子目錄的新網域,且同時包括完整路徑和查詢參數字串?
如何使用重寫規則將具有查詢參數字串的檔案重定向(Redirect)至根目錄(Root)當中?
跳轉邏輯
舉例來說,原本網址為:https://example.com/index.php?id=10,會重定向(Redirect)至新網址至:https://example.com/new-path/ 當中。
如何使用重定向(Redirect)將 https 網址強制 Force 指向至 http 網址?
跳轉邏輯
雖然不知道為什麼你需要這麼做,但有時若為了排除一些設定上的錯誤,你必須要暫時將網站從 https 轉移至 http 時,就可以使用這個重定向規則。
如何使用重定向(Redirect)將 http 網址強制 Force 指向至 https 網址?
跳轉邏輯
這個方式能夠強制將網站從 http 轉至 https,通常你的網站有duplicate content 重複內容的警告時,就可以使用這個 .htaccess 重定向規則。(但切記,你的網站一定必須先安裝並擁有 SSL 證書,否則會出現錯誤。)
如何刪除網址後綴,例如 index.html 或是 index.php 並重定向(301 Redirect)至根目錄(Root)當中?
如何保留參數字串,並保留網址結構,將參數字串作為目錄名稱並重定向(Redirect)至根目錄(Root)當中?
跳轉邏輯
舉例來說,原本你的網址為:https://example.com/index.php?id=1024,使用這個重定向(Redirect)規則後,新網址就會變至:https://example.com/1024/
如何保留參數字串,並保留網址結構,將參數字串作為目錄名稱並重定向(Redirect)至子目錄(subdirectoryt)當中?
如何將舊網站重定向(301 Redirect)至新網域,同時保留其他原始的URL路徑?
如何將存於根目錄的部落格文章重定向(302 Redirect)至 /blog/ 子目錄當中?
如何將一個目錄重定向(Redirect)至另一個目錄?
以上就是所有常見的 Redirect 重定向網址設定方式,如果有哪裡不清楚的地方歡迎在底下留言讓我知道!
相關文章
- Blogspot/Blogger – 不推薦你使用的 10 個原因
- HitPaw Video Converter – 免費影片轉檔軟體,影音剪輯、下載、轉檔還提供 AI 馬賽克功能應有盡有
- HitPaw 影片修復軟體:五大 AI 模型,輕鬆提升影片解析度至 4K!修復、上色、增強專業級影片修復!
- 宅在家也能抓寶?Pokémon GO 外掛:iPhone/Android 定位神器 Locawhere AnyTo 寶可夢飛人!
- Tenorshare iAnyGo + 報寶貝 2023 最佳推薦 Pokemon go 飛人外掛,更改手機 GPS 抓取任何寶可夢地圖怪物
- HitPaw Video Enhancer – 超強影片畫質修復工具,支援 30+ 影片格式可將低解析度影片提高至 8K 影片畫質
- 台灣微軟表示:Gofunco 非微軟授權經銷商,Windows 與 Office 序號為非法取得切勿購買
- 兩個小妙招快速解決 Windows 10 聲音忽大忽小的問題
- Facebook 分享偵錯工具 – Facebook Debug 官方工具,幫你更新已分享貼文的內容資訊
- SiteGround 替換 cPanel 大改版 – 全新的客戶區塊與自主開發 Site Tools 控制面板
- ESET 誤鎖網站?如何排解 ESET 判定錯誤解決方法,將誤鎖網站加入白名單當中
- instant.page – 預先加載超連結頁面,加快網站載入速度並提升頁面轉化率
titus says
請問一下
我可以怎麼轉換下列網址
========================================
https://seemedia.tw/cases/ct?id=13
https://seemedia.tw/cases/ct/13
=========================================
以此類推
id有可能 從0 – 999
Sliven says
Hi Titus,
你可以試試看以下的方式:
#Rewrite Query String from TechMoon
RewriteCond %{QUERY_STRING} ^id=(\w+)
RewriteRule ^cases/ct$ /cases/ct/%1? [R=302,L]
claire says
你好,想請問版大,我原本的永久連結是www.example.com/%year%/%monthnum%/%postname%.html
想要改成只有 postname並去掉結尾的.html。就是變成www.example.com/%postname%
曾嘗試用過yoast提供的工具 (https://yoast.com/research/permalink-helper.php) 產生出來的程式碼加到.htaccess中卻不成功。
還請大大不吝幫助。
Sliven says
Hi Claire,
首先你在添加重定向到 .htaccess 當中時要注意一點,妳所添加的程式碼建議在 # BEGIN WordPress 字串之前。
另外,你可以嘗試看看使用
RewriteRule ^\d{4}/\d{2}/([\w-]+)\.html$ http://www.example.com/$1/? [R=301,L]
,應該會達成你要的效果。您再試試看,有問題歡迎隨時留言。
claire says
謝謝大大~~但我一直得到 “500 Internal Server Error”的錯誤訊息~~
難道是我沒有更改的權限嗎? 來去主機商問看看~
Sliven says
Hi Claire,
若發生「500 Internal Server Error」的錯誤,應該是有程式碼打錯了才會導致這個問題。
有關這個錯誤,詳細內容你可以參考:https://techmoon.xyz/500-internal-server-error/。
你可以更換上一次提供給你的程式碼,使用
RewriteRule ^[0-9]+/[0-9]+/(.*)\.html$ /$1 [R=301,L]
這個規則試試看,應該可以成功。claire says
嗨嗨Sliven大大,
謝謝你,我已經弄好了~
那個 Internal Server Error應該是外掛出了問題。
我把所有外掛停用再重新啟用,都一切恢復正常。
再次感謝ㄚ
Sliven says
Hi Claire,
很高興有幫助妳解決問題!