本文參考資料為 WordPress Htaccess Tips And Tricks, 原作者 Kevin Muldoon。
.htaccess 是一個設定檔,讓你可以控制該路徑下的檔案及資料夾,以及所有子目錄。這個檔案名稱是由 hypertext access 而來,能為大多數的伺服器環境使用。
對於許多 WordPress 使用者來說,他們第一次看到 .htaccess 檔案應該是在自定他們網站的固定網址時。為了使用更美觀的鏈結,而不是預設的鏈結格式(例如:https://free.com.tw/sample-post/ 而不是 https://free.com.tw/?p=123 ),我們必須將以下程式碼加入 .htaccess 檔案:
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress
如果 .htaccess 不存在,你可以自己建立一個然後將它上傳。你需要做的只有建立一個空白的文字檔,將它儲存為 .htaccess 然後上傳到網站的根目錄。請確認在檔案的開頭有一個點,是不可漏掉的。
你也必須確認你的 .htaccess 檔案是伺服器可寫入的,WordPress 才能將適當的程式碼加入你的 .htaccess 。WordPress.org 建議把檔案權限設定為 644 。
.htaccess 檔案不僅用於固定網址,該檔案也能強化網站安全。數以百萬的 WordPress 用戶利用它來保護網站免於垃圾郵件發送者、黑客和其他已知的威脅。
在本文裡,我會分享一些用於 .htaccess 的程式碼片段,可以強化你的網站安全。相信你會找到一些對你有幫助的程式碼。
你可能也注意到上面固定網址的 .htaccess 程式碼是包覆於 #BEGIN WordPress 及 #END WordPress 裡。WordPress 可以更新這個標籤裡的程式碼,你必須把要新增的程式碼片段放置於你的 .htaccess 檔案的頂部或底部(在 #BEGIN WordPress 之前或 #END WordPress 之後)。
請注意…
.htaccess 是 WordPress 裡個性倔強的檔案,只要其中任何一個字符出錯,檔案就會出現錯誤。當錯誤發生時,它通常會影響到整個網站的運作,最重要的是你必須確保輸入 .htaccess 的程式碼沒有問題。
在開始前,備份一下你當前使用的 .htaccess 檔案吧!將它保存到你電腦裡安全的位置。如果可以,也能在雲端硬碟備份一份。
無論何時更新了你伺服器上的 .htaccess 檔案,記得回到網站重新整理一下,看看網站是不是還能正常運作。不要跳過這個步驟,因為確認網站運作正常是至關重要的一個步驟。如果你的網站給你一個白畫面,立即回復、還原 .htaccess 修改前的上個步驟。
如果你無法還原你的備份,那麼將伺服器上的 .htaccess 刪除,然後建立一個空白的 .htaccess 檔案並將它上傳。這將協助你使你的網站回復連線;當你的網站出現問題,這顯然是最重要的一步。
1. 保護 .htaccess
既然 .htaccess 擁有你整個網站的控制權,保護它遠離不相關人士就顯得很重要。以下的程式碼將讓黑客無法存取你的 .htaccess 檔,只需要透過 FTP 來修改 .htaccess 檔案(或是控制台的檔案管理)。
<files ~ "^.*\.([Hh][Tt][Aa])"> order allow,deny deny from all satisfy all </files>
2. 保護 WP-Config.php
另一個重要的檔案是 wp-config.php。這個檔案裡包含資料庫的登入資訊,以及其他的系統設定。因此,明確的作法是禁止任何人訪問它。
<files wp-config.php> order allow,deny deny from all </files>
3. 保護 /Wp-Content/
wp-content 資料夾也是 WordPress 相當重要的一部分,在這個資料夾裡包含了你的佈景主題、外掛、上傳的媒體檔案(圖片、影片)及快取檔案。
有鑑於此,這通常也是黑客下手的目標。當垃圾郵件發送者試圖破壞你的老網站,他必須將郵件程式傳到你的上傳資料夾。然後使用你的伺服器來寄送垃圾郵件;這麼做會使你的伺服器被列入垃圾郵件名單。
你可以透過創建一個獨立的 .htaccess 檔案來解決類似問題:
Order deny,allow Deny from all <Files ~ ".(xml|css|jpe?g|png|gif|js)$"> Allow from all </Files>
你必須將 .htaccess 檔案獨立上傳到 wp-content 主目錄,例如 www.yourwebsite.com/wp-content/。這麼做只會允許 XML、CSS、JPG、JPEG、PNG、GIF 和 JavaScript 被上傳到媒體資料夾,其餘的檔案類型將被拒絕。
4. 保護 Include-Only 檔案
某些檔案是絕不用讓使用者存取的。你可以加入以下程式碼,來阻擋使用者存取這些檔案:
# Block the include-only files. <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^wp-admin/includes/ - [F,L] RewriteRule !^wp-includes/ - [S=3] RewriteRule ^wp-includes/[^/]+\.php$ - [F,L] RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L] RewriteRule ^wp-includes/theme-compat/ - [F,L] </IfModule>
5. 限制存取 WordPress 控制台
另一個黑客覬覦的目標是 WordPress 控制台。如果他們獲取了存取該區域的權限,他們就可以在你的網站上為所欲為。
確保 WordPress 控制台更加安全,建立一個 .htaccess 檔案並加入以下程式碼:
# Limit logins and admin by IP <Limit GET POST PUT> order deny,allow deny from all allow from 12.34.56.78 </Limit>
請務必將 12.34.56.78 更改為你的 IP 位址(你可以在 What is My IP? 找到你的 IP Address),然後將它上傳到網站的 /wp-admin/ 路徑下,例如 www.yourwebsite.com/wp-admin/ 。
只有你能夠存取 WordPress 控制台,其他人將會被阻擋在外。
其他的管理員或作者的 IP 可以加在後面,你可以在 allow from 後面加入其他 IP,不同的 IP 間使用半形逗號來區隔,例如:
allow from 12.34.56.78, 98.76.54.32, 19.82.73.64
6. 封鎖某人進入你的網站
如果你知道某個來者不善的 IP 位址,你可以使用以下的程式碼將它拒於網站之外。舉例來說,你可以封鎖某些留下垃圾留言或是嘗試存取你 WordPress 控制台的使用者。
<Limit GET POST> order allow,deny deny from 123.456.78.9 deny from 987.654.32.1 allow from all </Limit>
7. 將使用者傳送到維護頁面
一些維護外掛像是 Ultimate Maintenance Mode 和 Mainteance 相當實用,當你在維護網站時,可以顯示一個暫時的頁面給使用者,或是在你更新網站時。
不幸的是,維護外掛只有在你的網站運作正常時才起得了作用。
如果你想未雨稠繆,我建議你建立一個基本的 .html 頁面,將它命名為 maintenance.html 來提醒使用者目前網站遭遇一些問題,但會在短時間內恢復連線。當你的網站掛掉時,只要將以下程式碼加入你的 .htaccess 檔案,就能將所有流量引導至維護畫面。
RewriteEngine on RewriteCond %{REQUEST_URI} !/maintenance.html$ RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123 RewriteRule $ /maintenance.html [R=302,L]
你必須要為你的網站來自定上方程式碼。變更上方的檔案名稱,來符合你的維護頁面路徑,你也必須加入你的 IP 位址,以便在維護狀態時不會被引導至維護頁面(讓你可以繼續調整網站),以上代碼使用 302 轉址確保維護頁面不會被搜尋引擎索引。
8. 禁止瀏覽目錄
讓未經授權的使用者瀏覽目錄下的檔案或資料夾是相當危險的一件事情。如要禁止訪問你網站的目錄,只要在你的 .htaccess 加入以下程式碼即可:
# disable directory browsing Options All -Indexes
9. 允許瀏覽器快取
當啟動瀏覽器快取功能後,將允許使用者從你的網站儲存元件,而無須重新下載。
它用於設計元素,例如 CSS 樣式表和其它媒體內容,例如圖片。這是一個實用的技巧,因為當圖片上傳到網站後,很少會再次更新。瀏覽器快取能讓訪客直接讀取儲存在他們電腦裡的圖片,而不用從你的伺服器下載,節省頻寬、也提升了頁面載入速度。
啟用瀏覽器快取,你需要做的就是把以下程式碼加入 .htaccess 檔案:
## EXPIRES CACHING ## <IfModule mod_expires.c> ExpiresActive On ExpiresByType image/jpg "access 1 year" ExpiresByType image/jpeg "access 1 year" ExpiresByType image/gif "access 1 year" ExpiresByType image/png "access 1 year" ExpiresByType text/css "access 1 month" ExpiresByType application/pdf "access 1 month" ExpiresByType text/x-javascript "access 1 month" ExpiresByType application/x-shockwave-flash "access 1 month" ExpiresByType image/x-icon "access 1 year" ExpiresDefault "access 2 days" </IfModule> ## EXPIRES CACHING ##
10. 重新導向一個網址
301 重新導向讓你可以通知搜尋引擎該鏈結已經重新移到新的路徑。它可以被用來重新導向一個網址、資料夾,甚至是一整個網站。
因此,它常被用於網址發生變化時,例如變更網域名稱、變更固定網址結構,或是變更頁面名稱(例如將頁面名稱從 my-news 變成 mygreatnews)。
要重新導向某個路徑,你需要做的就是加入以下程式碼:
Redirect 301 /oldpage.html https://www.yourwebsite.com/newpage.html Redirect 301 /oldfolder/page2.html /folder3/page7.html Redirect 301 / https://www.mynewwebsite.com/
11. 禁止直接連結圖片
直接連結的意思是某人直接取用你的圖片鏈結,然後將它分享到其他網頁上。這常發生在討論區,但大多數的網站擁有者仍然會這麼做。直接連結可能對你的網站帶來負面影響,包括使你的網站變慢,也會讓你的頻寬費用增加。
你可以禁止除了你的網站外的網站直接連結圖片,將以下程式碼加入即可。請確認將以下網址更改為你的網址。
RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourwebsite.com [NC] RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourotherwebsite.com [NC] RewriteRule \.(jpg|jpeg|png|gif)$ https://i.imgur.com/g7ptdBB.png [NC,R,L]
當其他人試圖從其他網址瀏覽你的圖片時,他們將會看到禁止圖片,而這圖片可以變更為任何你想要的圖(在上面的最後一行設定圖片路徑)。
禁止直接連結可能導致一些 RSS 閱讀器無法顯示你 RSS Feed 裡的圖片。
希望以上的 .htaccess 檔案技巧對你有所助益。如你所見,它是一個可以完成許多工作的設定檔。