SEO GUIDE
SEO 指南 Q & A
技術 SEO

使用.htaccess 來阻止不想要的訪客來你的網頁

使用.htaccess 來阻止不想要的訪客來你的網頁

網站面臨的惡意流量比過去任何時候都更嚴峻,不只是傳統的內容盜爬、廣告機器人與盜連流量,還新增了大量未經授權的 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 位址

.htaccess
deny from 123.123.123.123

阻擋 IP 範圍

若要阻擋 123.123.123.1123.123.123.255 整段 IP,只要省略最後一組數字即可:

.htaccess
deny from 123.123.123

使用 CIDR 標記阻擋

更精確的做法是使用 CIDR(Classless Inter-Domain Routing,無類別網域間路由)標記:

  • 阻擋 123.123.123.1123.123.123.255,使用 123.123.123.0/24
  • 阻擋 123.123.64.1123.123.127.255,使用 123.123.64.0/18
.htaccess
deny from 123.123.123.0/24
實務建議:單純靠 .htaccess 阻擋 IP 已不足以應付現代攻擊。建議搭配 CloudflareSucuri 等 CDN/WAF 服務,在 DNS 層級就阻擋惡意流量,連伺服器都不會收到請求。對於台灣中小企業網站,免費版 Cloudflare 已能阻擋大多數常見威脅。

依據 User-Agent 阻擋不良訪客

惡意爬蟲常會使用動態變化的 IP,讓單純的 IP 阻擋失效。但這些爬蟲通常會帶有固定的 User-Agent 字串(即瀏覽器或機器人的自我介紹)。針對 User-Agent 阻擋,能一次擋下整類爬蟲。

阻擋單一 User-Agent(RewriteRule)

.htaccess
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} Baiduspider [NC]
RewriteRule .* - [F,L]

替代寫法(BrowserMatchNoCase)

.htaccess
BrowserMatchNoCase "Baiduspider" bots

Order Allow,Deny
Allow from ALL
Deny from env=bots

一次阻擋多個 User-Agent

若要同時阻擋多個爬蟲,可以用直線符號 | 串連起來:

.htaccess
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^.*(Baiduspider|HTTrack|Yandex|SemrushBot|AhrefsBot).*$ [NC]
RewriteRule .* - [F,L]

值得關注的 AI 訓練爬蟲

隨著 ChatGPT、Claude、Perplexity 等 AI 服務崛起,未經授權的 AI 訓練爬蟲成為新一類流量問題。若您不希望內容被 AI 模型訓練使用,可以同時透過 .htaccessrobots.txt 雙重阻擋。

.htaccess ‧ 阻擋 AI 爬蟲
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^.*(GPTBot|ChatGPT-User|ClaudeBot|anthropic-ai|PerplexityBot|Google-Extended|Bytespider|CCBot|FacebookBot).*$ [NC]
RewriteRule .* - [F,L]
注意:阻擋 AI 爬蟲是雙面刃。一方面保護內容不被未經授權使用,另一方面可能讓您的網站無法被 ChatGPT、Perplexity 等 AI 引擎引用,失去 AI 搜尋時代的曝光機會。建議依網站性質決定:媒體與原創內容站可以擋,想搶 AI 搜尋流量的行銷型網站則建議放行 GPTBotPerplexityBotGoogle-Extended 等。

阻擋盜連(不良 Referer)

盜連(Hotlinking)是指其他網站直接連結到您的圖片、影片或檔案,使用您的伺服器頻寬卻顯示在他們的網頁上。這不僅消耗頻寬,也可能侵犯您的內容權益。透過阻擋特定來源(Referer),可以有效解決這個問題。

阻擋單一來源網站

.htaccess
RewriteEngine On
RewriteCond %{HTTP_REFERER} example\\.com [NC]
RewriteRule .* - [F]

替代寫法(SetEnvIfNoCase)

.htaccess
SetEnvIfNoCase Referer "example.com" bad_referer

Order Allow,Deny
Allow from ALL
Deny from env=bad_referer

阻擋多個來源網站

.htaccess
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 後會延後重新抓取,不會從索引中刪除您的頁面

.htaccess ‧ 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 中含有 botcrawlspider 的請求(涵蓋大多數主流搜尋引擎),但第二個 RewriteCond 允許爬蟲讀取 robots.txt,這樣它們才能讀到您新的爬取規則。

重要警告:503 回應只能用於短期(建議不超過 48 小時)。若超過兩天仍持續回 503,Google 可能會判定為長期伺服器故障,開始從索引中移除您的頁面連結。長期的爬取控制請改用 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
選擇判斷原則:能用 CDN/WAF 解決的就不要動 .htaccess,能用 robots.txt 解決的就不要動 IP 黑名單。.htaccess 過長會拖慢伺服器回應時間,因為每次請求都要重新解析整份檔案。

常見問答 FAQ

修改 .htaccess 後網站出現 500 錯誤怎麼辦?
500 錯誤幾乎都是語法錯誤造成的,可依序處理。第一,還原備份,若修改前有備份,先回到正常版本。第二,逐行註解除錯,若沒有備份,在剛加入的程式碼前加上 # 註解,逐行測試是哪一行出問題。第三,檢查常見錯誤,確認 RewriteEngine On 是否啟用、特殊字元(如點號、問號)是否正確跳脫、引號是否成對。建議養成習慣,每次修改前先複製一份 .htaccess.bak 備份,出問題時隨時能還原到穩定版本。若使用虛擬主機,也可先在測試子網域驗證規則無誤後,再套用到正式站,能大幅降低整站掛掉的風險。
該阻擋 ChatGPT、Claude 等 AI 爬蟲嗎?
沒有標準答案,取決於您的網站性質。建議阻擋的情況:新聞媒體、付費內容、原創教學、攝影與設計作品站,內容本身就是商品。建議放行的情況:行銷型網站、企業官網、電商產品頁,希望被 AI 引擎引用以獲得品牌曝光與流量。折衷做法是阻擋訓練用爬蟲(如 GPTBotCCBot),但放行答案引擎爬蟲(如 OAI-SearchBotPerplexityBotGoogle-Extended)。其中 Google-Extended 是 Google 用於 Gemini 訓練的爬蟲,阻擋它並不會影響您在 Google 搜尋的自然排名,可以安心設定。實務上多數台灣中小企業官網屬於行銷型網站,通常建議放行答案引擎爬蟲以爭取曝光。
.htaccess 阻擋規則寫了一堆,會不會拖慢網站速度?
。每次有訪客請求網頁時,Apache 都必須重新讀取並解析整份 .htaccess,而且包含子目錄中的所有 .htaccess。當阻擋規則累積到上百條時,每次請求都會增加數毫秒到數十毫秒的延遲。優化方向有三:其一,把大量 IP 阻擋移到防火牆或 Cloudflare 處理。其二,合併同類規則,例如把多條 RewriteCond 用直線符號串成一條長條件。其三,將靜態規則寫入 Apache 主設定檔(httpd.conf),主設定檔只在伺服器啟動時讀取一次,效能遠勝 .htaccess。若您使用共享主機無法修改主設定檔,那 .htaccess 就是唯一選擇。
用了 Cloudflare 還需要設定 .htaccess 嗎?
需要,但兩者角色不同。Cloudflare 處理外圍流量,例如大規模 DDoS、已知惡意 IP、機器人自動識別。.htaccess 則處理網站內部邏輯,例如 URL 重寫、伺服器層級的細部控制、針對特定行為的精確阻擋。最佳實踐有三:其一,大規模阻擋交給 Cloudflare 的防火牆規則或 WAF 面板,反應速度更快。其二,精細的條件式邏輯保留在 .htaccess,例如將來自特定 Referer 的請求重導到首頁。其三,注意真實 IP 問題,啟用 Cloudflare 後伺服器看到的訪客 IP 會變成 Cloudflare 代理 IP,阻擋規則需改用 X-Forwarded-For 標頭取得真實 IP,否則可能誤擋正常訪客。
怎麼知道網站正在被哪些惡意 IP 或爬蟲攻擊?
推薦三個層次的監控方法。其一,伺服器存取日誌,分析 access.log 找出短時間內請求次數異常高的 IP,或大量 404 與 500 錯誤的來源,可用 awkgrep 等指令統計,或使用免費的即時日誌分析工具 GoAccess。其二,Cloudflare Analytics,若使用 Cloudflare,後台的 Security 面板能直接看到威脅來源國家、機器人類型與攻擊模式,相當直觀。其三,安全外掛,若使用 WordPress,Wordfence 或 Sucuri Security 等外掛能即時記錄攻擊嘗試並發出通知。建議每週至少檢查一次日誌,及早發現異常模式並動態調整阻擋規則。

歡迎推廣本文,請務必連結(LINK)本文出處:新視野網頁設計公司