網站面臨的惡意流量比過去任何時候都更嚴峻,不只是傳統的內容盜爬、廣告機器人與盜連流量,還新增了大量未經授權的 AI 訓練爬蟲(如 GPTBot、ClaudeBot、PerplexityBot、Bytespider 等)。這些訪客可能拖垮伺服器、消耗頻寬、竊取內容,甚至影響 SEO 排名。.htaccess 是 Apache 伺服器上一個強大的隱藏設定檔,能在進入網頁之前就攔截這些不速之客。本文將完整介紹從 IP 阻擋、User-Agent 過濾、防盜連到暫時性限速等實務做法。
什麼是 .htaccess?
.htaccess(HyperText Access)是 Apache 伺服器上的分散式設定檔。它放在網站根目錄或任何子目錄中,能控制該目錄與所有子目錄的存取權限、URL 重寫、錯誤頁面、快取規則等。每當有訪客請求網頁時,Apache 都會優先讀取 .htaccess 並執行其中的規則。
.htaccess 前請務必先備份原始檔案。語法錯誤可能導致整個網站出現 500 Internal Server Error。建議在測試環境先驗證規則正確後,再上線正式環境。
使用 IP 位址阻擋
當網站遭遇單一或少數惡意 IP 攻擊時,IP 阻擋是最直接有效的做法。例如發現某些 IP 頻繁嘗試登入後台、發送垃圾留言或大量爬取資料時,可以直接從伺服器層級擋下。
阻擋單一 IP 位址
deny from 123.123.123.123
阻擋 IP 範圍
若要阻擋 123.123.123.1 至 123.123.123.255 整段 IP,只要省略最後一組數字即可:
deny from 123.123.123
使用 CIDR 標記阻擋
更精確的做法是使用 CIDR(Classless Inter-Domain Routing,無類別網域間路由)標記:
- 阻擋
123.123.123.1至123.123.123.255,使用123.123.123.0/24 - 阻擋
123.123.64.1至123.123.127.255,使用123.123.64.0/18
deny from 123.123.123.0/24
.htaccess 阻擋 IP 已不足以應付現代攻擊。建議搭配 Cloudflare、Sucuri 等 CDN/WAF 服務,在 DNS 層級就阻擋惡意流量,連伺服器都不會收到請求。對於台灣中小企業網站,免費版 Cloudflare 已能阻擋大多數常見威脅。
依據 User-Agent 阻擋不良訪客
惡意爬蟲常會使用動態變化的 IP,讓單純的 IP 阻擋失效。但這些爬蟲通常會帶有固定的 User-Agent 字串(即瀏覽器或機器人的自我介紹)。針對 User-Agent 阻擋,能一次擋下整類爬蟲。
阻擋單一 User-Agent(RewriteRule)
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} Baiduspider [NC]
RewriteRule .* - [F,L]
替代寫法(BrowserMatchNoCase)
BrowserMatchNoCase "Baiduspider" bots Order Allow,Deny Allow from ALL Deny from env=bots
一次阻擋多個 User-Agent
若要同時阻擋多個爬蟲,可以用直線符號 | 串連起來:
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^.*(Baiduspider|HTTrack|Yandex|SemrushBot|AhrefsBot).*$ [NC]
RewriteRule .* - [F,L]
值得關注的 AI 訓練爬蟲
隨著 ChatGPT、Claude、Perplexity 等 AI 服務崛起,未經授權的 AI 訓練爬蟲成為新一類流量問題。若您不希望內容被 AI 模型訓練使用,可以同時透過 .htaccess 與 robots.txt 雙重阻擋。
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^.*(GPTBot|ChatGPT-User|ClaudeBot|anthropic-ai|PerplexityBot|Google-Extended|Bytespider|CCBot|FacebookBot).*$ [NC]
RewriteRule .* - [F,L]
GPTBot、PerplexityBot、Google-Extended 等。
阻擋盜連(不良 Referer)
盜連(Hotlinking)是指其他網站直接連結到您的圖片、影片或檔案,使用您的伺服器頻寬卻顯示在他們的網頁上。這不僅消耗頻寬,也可能侵犯您的內容權益。透過阻擋特定來源(Referer),可以有效解決這個問題。
阻擋單一來源網站
RewriteEngine On
RewriteCond %{HTTP_REFERER} example\\.com [NC]
RewriteRule .* - [F]
替代寫法(SetEnvIfNoCase)
SetEnvIfNoCase Referer "example.com" bad_referer Order Allow,Deny Allow from ALL Deny from env=bad_referer
阻擋多個來源網站
RewriteEngine On
RewriteCond %{HTTP_REFERER} example\\.com [NC,OR]
RewriteCond %{HTTP_REFERER} example\\.net [NC]
RewriteRule .* - [F]
暫時性阻擋搜尋引擎爬蟲(503 回應)
某些情況下,您不想直接傳送 403 拒絕訊息給訪客,因為這會讓搜尋引擎以為網站長期失效,可能影響 SEO。例如:
- 網站進行重大改版、資料庫遷移中
- 遇到大型行銷活動,伺服器流量爆量
- 暫時不希望搜尋引擎抓取,但又不想流失既有索引
這時應該使用 503 Service Unavailable 回應,告訴搜尋引擎:這個請求只是暫時性被拒絕,請稍後再來。Google 看到 503 後會延後重新抓取,不會從索引中刪除您的頁面。
ErrorDocument 503 "Site temporarily disabled for crawling"
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^.*(bot|crawl|spider).*$ [NC]
RewriteCond %{REQUEST_URI} !^/robots\\.txt$
RewriteRule .* - [R=503,L]
上述程式碼的邏輯:抓取所有 User-Agent 中含有 bot、crawl、spider 的請求(涵蓋大多數主流搜尋引擎),但第二個 RewriteCond 允許爬蟲讀取 robots.txt,這樣它們才能讀到您新的爬取規則。
robots.txt。詳見:如何使用 robots.txt 阻止搜尋引擎爬取您的網頁
綜合防護策略
單純依賴 .htaccess 已不足以應付當代攻擊。建議採取多層防護策略:
- CDN / WAF 層(最外層):Cloudflare、Sucuri、Akamai 等服務在 DNS 層級阻擋 99% 的惡意流量,連伺服器都不會收到請求。對中小企業而言,免費版 Cloudflare 就能擋下大量機器人攻擊。
- 伺服器層(.htaccess):處理 CDN 漏網之魚,主要用於針對性的 IP 黑名單、User-Agent 過濾、防盜連、503 暫時阻擋等場景。
- 應用程式層:在 PHP、Node.js 等程式碼中加入速率限制(Rate Limiting)、CAPTCHA 驗證、登入失敗鎖定機制,處理需要邏輯判斷的攻擊。
-
robots.txt 層:對善意但不需要的爬蟲(如 SEO 工具的 SemrushBot、AhrefsBot),用
robots.txt委婉拒絕即可,不必動用.htaccess。
.htaccess,能用 robots.txt 解決的就不要動 IP 黑名單。.htaccess 過長會拖慢伺服器回應時間,因為每次請求都要重新解析整份檔案。
常見問答 FAQ
修改 .htaccess 後網站出現 500 錯誤怎麼辦?
# 註解,逐行測試是哪一行出問題。第三,檢查常見錯誤,確認 RewriteEngine On 是否啟用、特殊字元(如點號、問號)是否正確跳脫、引號是否成對。建議養成習慣,每次修改前先複製一份 .htaccess.bak 備份,出問題時隨時能還原到穩定版本。若使用虛擬主機,也可先在測試子網域驗證規則無誤後,再套用到正式站,能大幅降低整站掛掉的風險。
該阻擋 ChatGPT、Claude 等 AI 爬蟲嗎?
GPTBot、CCBot),但放行答案引擎爬蟲(如 OAI-SearchBot、PerplexityBot、Google-Extended)。其中 Google-Extended 是 Google 用於 Gemini 訓練的爬蟲,阻擋它並不會影響您在 Google 搜尋的自然排名,可以安心設定。實務上多數台灣中小企業官網屬於行銷型網站,通常建議放行答案引擎爬蟲以爭取曝光。
.htaccess 阻擋規則寫了一堆,會不會拖慢網站速度?
.htaccess,而且包含子目錄中的所有 .htaccess。當阻擋規則累積到上百條時,每次請求都會增加數毫秒到數十毫秒的延遲。優化方向有三:其一,把大量 IP 阻擋移到防火牆或 Cloudflare 處理。其二,合併同類規則,例如把多條 RewriteCond 用直線符號串成一條長條件。其三,將靜態規則寫入 Apache 主設定檔(httpd.conf),主設定檔只在伺服器啟動時讀取一次,效能遠勝 .htaccess。若您使用共享主機無法修改主設定檔,那 .htaccess 就是唯一選擇。
用了 Cloudflare 還需要設定 .htaccess 嗎?
.htaccess 則處理網站內部邏輯,例如 URL 重寫、伺服器層級的細部控制、針對特定行為的精確阻擋。最佳實踐有三:其一,大規模阻擋交給 Cloudflare 的防火牆規則或 WAF 面板,反應速度更快。其二,精細的條件式邏輯保留在 .htaccess,例如將來自特定 Referer 的請求重導到首頁。其三,注意真實 IP 問題,啟用 Cloudflare 後伺服器看到的訪客 IP 會變成 Cloudflare 代理 IP,阻擋規則需改用 X-Forwarded-For 標頭取得真實 IP,否則可能誤擋正常訪客。
怎麼知道網站正在被哪些惡意 IP 或爬蟲攻擊?
access.log 找出短時間內請求次數異常高的 IP,或大量 404 與 500 錯誤的來源,可用 awk、grep 等指令統計,或使用免費的即時日誌分析工具 GoAccess。其二,Cloudflare Analytics,若使用 Cloudflare,後台的 Security 面板能直接看到威脅來源國家、機器人類型與攻擊模式,相當直觀。其三,安全外掛,若使用 WordPress,Wordfence 或 Sucuri Security 等外掛能即時記錄攻擊嘗試並發出通知。建議每週至少檢查一次日誌,及早發現異常模式並動態調整阻擋規則。