網址連結使用https已是現在不可少的必要條件,現在不少程式會需要開啟 mod_rewrite 功能,且又例如中文免費架站程式WordPress也常常會用到mod_rewrite,而mod_rewrite是apache 一個模組,多用來網址改寫及隱藏檔案路徑…等,功能很是強大,該說說明針對mod_rewrite功能作簡介,及如何於主機空間的cPanel控制台開啟和實務中常見發生的狀況作提醒。
如何於主機空間cPanel控制台開啟mod_rewrite?
1.至cPanel控制台→檔案管理員→public_html資料夾(或是使用子網址則至放置網頁程式的資料夾裡)→找到.htaccess檔案,於該.htaccess裡加入
RewriteEngine on
便可以開啟
2.如果看不到.htaccess這檔案? 以在public_html資料夾為例,
①先進入到cPanel控制台→檔案管理員→public_html資料夾裡。
②在於該畫面的右上角會有一個〝設定〞的按鈕,點選後,會跳出〝喜好設定〞的視窗,勾選該視窗裡的 “顯示隱藏檔案 (dotfiles)”後按save,即可以呼叫出.htaccess檔案。
如何於.htaccess裡設定將網址由http 轉到 https
承上述,呼叫出.htaccess後,加入以下即可
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.您的SSL網址.com/$1 [R,L]
以上的設定主要是針對所有連到PORT 80 的連線,PORT80 一般都是沒有SSL的連線,自動導到有SSL的網址,以上這例子下,有SSL憑證的網址,您需要更換成您網站主機空間有SSL的網址,這樣就可以確保您的網站空間的訪客都會連到有SSL資安憑證的頁面了。
如果以上方法行不通(個人測試是可以的),您也可以試試看以下方法做SSL 自動導向
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]
Header always set Content-Security-Policy “upgrade-insecure-requests;”
※如果您用WordPress (或其他免費架站程式),也可以使用上述的方式來處理,或其網站後台應都會有開啟強制使用https的設定,如:Wordpress有許多的相關外掛可以安裝(如下圖裡Easy HTTPS Redirection就是相關設定的外掛),開啟後,常見開啟後會自動於.htaccess寫入rewrite語法。
※由於每個使用的WordPress版本不同,且每個外掛的未來更新狀況不同,故上述Easy HTTPS Redirection外掛僅用於展示說明(非推薦)。
※如果是WINDOWS主機的話呢? 因為Windows 虛擬主機沒有.htaccess 可以用,您可以參考這邊Windows主機Plesk Obsidian 18 介面,將http://自動導向https://
台灣很便宜的商用SSL憑證推薦購買可以參考這邊
為何已經安裝SSL主機空間上,還要作上述mod_rewrite的設定呢?
主機空間有提供〝http〞與〝https〞2種連結方式,而其中https需要申請SSL(不論是免費或是購買,詳細說明請點我),SSL申請並安裝於主機上後,僅是讓https可以正常連結使用,則此時的狀況是http可以連;https也可以連,而使用http連時,網址就是http://*****.com,此時是沒有SSL加密;同時https連結,呈現方式會https://******.com,此時是有SSL加密。
mod_rewrite的功能是讓http的網址連結 跳轉到 https的網址連結,是指輸入網址時,不論是輸入http 還是https,都一律跳轉成https的方式,因一般的網友在輸入網址時,只會直接輸入網址,不會特別在前面加上http或https,則該設定可以讓網友一律都是用https的方式在瀏覽網站,此也為目前全較主流且各大瀏覽器均喜愛的方式。
上面說mod_rewrite很強大,什麼是mod_write呢?還可以作什麼且應該注意什麼呢?
mod_rewrite是Apache的一個模組,包括很多的功能(官方詳細說明請點我),常見為針對網址改寫(早先一律跳轉https或、動態網站靜態化)、同時也可以避免訪問敏感檔案(如因路徑改寫、防盜連)…等。
由於mod_rewrite的強大,有時網站完成後,.htaccess裡會有滿滿的mod_rewrite的指令,有些是自己寫的;有些是設定時寫入(如防盜連,也是用mod_rewrite的方式達成,設定教學請點我),故此在網站完成後,需要:
①紀錄所有mod_rewrite的功能。
②確保所有的功能都正常運作(因許多mod_rewrite的寫法若有衝突,可能會造成功能失效或網站無法顯示)
mod_rewrite可用來設定轉址
mod_rewrite可用來設定轉址,當二個網址在同一主機上,要設定連結A網址會轉至B網址時,就可以用mod_rewrite來設定,常見的應用轉址方式是使用.htaccess設定:
1.將某頁轉到另一個網址,加入以下設定
RewriteEngine On
RewriteRule ^old-page\.html$ https://example.com/new-page.html [R=301,L]
這表示:將 old-page.html 永久轉址到 https:// example.com/new-page.html
old-page.html和example.com/new-page.html是舉例範例,請輸入要設定的網頁網址。
2.全站轉址,需將連結A網址會轉至B網址時,加入以下設定
RewriteEngine On
RewriteCond %{HTTP_HOST} ^old-domain\.com$ [NC]
RewriteRule ^(.*)$ https://new-domain.com/$1 [R=301,L]
這表示:將old-domain.com轉至new-domain.com
old-domain.com和new-domain.com是舉例範例,請輸入要設定的網址。
若是要將主機上的網址設定轉址至外部主機的網址,可參考此轉址設定:https://wpoki.com/?p=5999
3.將非 www 轉為 www,加入以下設定
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
**注意事項**
.htaccess 必須放在正確的目錄(cPanel 通常是根目錄 public_html),
檔案開頭必須啟用RewriteEngine On
若設定後無效,請確認:
1.mod_rewrite 模組是否有啟用
2.AllowOverride All 是否在 Apache 設定中啟用(這是允許 .htaccess 生效的條件)
結論
水能載舟亦能覆舟,功能愈強大使用的愈多,在釐清問題時需要查找的原因也愈多,常見許多使用者因沒能完整紀錄.htaccess裡的設定,且.htaccess不若網頁程式直接顯示(是隱藏檔),導致在發生問題,需要花費許多時間才能解決問題,反而因此花費不少成本,故事後的紀錄與維護常也是關鍵的一環。
想了解更多CPANEL是什麼及更多有關cPanel教學請參考:
附加網域/別名設定
cPanel控制台虛擬主機,如何查看各資料夾空間使用紀錄
虛擬主機DNS SERVER的設定及其設定失效時的影響
Linux主機中如何使用.htaccess關閉緩存?
Linux虛擬主機cPanel控制台提供的Sitejet Builder是什麼?
文章來源 : https://wpoki.com
GIPHY App Key not set. Please check settings
One Comment