DNS
Mac 上 /etc/hosts 的變更沒有作用
/etc/hosts 檔案只在這部 Mac 上把名稱對應到 IP 位址。mDNSResponder 會讀取它,但有些 App 和設定會繞過它。
症狀
- 你在
/etc/hosts加了一行,但瀏覽器仍然打開舊網站。 - 項目在「終端機」中有效,在某個 App 中卻沒有。
example.com有效,但www.example.com沒有。
可能原因
- 行格式錯誤。每一行必須以 IP 位址開頭,接著是主機名稱。以
#開頭的是註解。 - 缺少名稱。這個檔案只對應完全相符的名稱。需要的每個名稱都要加上,例如
www.example.com以及example.com。 - 快取的回應。macOS 或瀏覽器可能會保留舊位址一段時間。
- 代理伺服器或 App 自己的 DNS。使用代理伺服器時,名稱由代理伺服器查詢。有些 App 也有自己的 DNS 設定。
如何檢查
顯示檔案內容。
cat /etc/hosts向 macOS 解析器查詢該名稱,結果必須是檔案中的位址。
dscacheutil -q host -a name example.com顯示系統的代理伺服器設定。代理伺服器會自行查詢名稱。
scutil --proxy
如何修正
以管理者身分在文字編輯器中打開檔案。
sudo nano /etc/hosts需要管理者密碼。
每個名稱加一行。IP 位址放最前面,後面接一個或多個名稱。
127.0.0.1 example.com www.example.com儲存檔案。在 nano 中,按 Control-O,再按 Return,然後按 Control-X。
清除 DNS 快取。請參閱清除 Mac 上的 DNS 快取。
sudo killall -HUP mDNSResponder需要管理者密碼。
結束瀏覽器再重新打開。
如果 App 使用代理伺服器,就不透過代理伺服器測試,或在代理伺服器上加入這個項目。
常見問題
需要重新啟動 Mac 嗎?
不需要。儲存檔案、清除 DNS 快取,再重新打開 App。
可以使用 *.example.com 這類萬用字元嗎?
不行。hosts 檔案的格式包含位址、正式主機名稱和別名。每個名稱都要寫在該行中。
資料來源
- hosts(5),macOS 27.2 內建的 man 手冊頁
- mDNSResponder(8),macOS 27.2 內建的 man 手冊頁
- Apple 支援(已封存):在 OS X 中重置 DNS 快取
- scutil(8),macOS 27.2 內建的 man 頁面
資料來源檢查日期:2026年10月29日。man 頁面為 macOS 內建版本;在終端機中用 man <name> 開啟。