DNS

Mac 上 /etc/hosts 的變更沒有作用

/etc/hosts 檔案只在這部 Mac 上把名稱對應到 IP 位址。mDNSResponder 會讀取它,但有些 App 和設定會繞過它。

適用於:所有目前的 macOS 版本。檢查日期:2026年10月29日

症狀

  • 你在 /etc/hosts 加了一行,但瀏覽器仍然打開舊網站。
  • 項目在「終端機」中有效,在某個 App 中卻沒有。
  • example.com 有效,但 www.example.com 沒有。

可能原因

  • 行格式錯誤。每一行必須以 IP 位址開頭,接著是主機名稱。以 # 開頭的是註解。
  • 缺少名稱。這個檔案只對應完全相符的名稱。需要的每個名稱都要加上,例如 www.example.com 以及 example.com。
  • 快取的回應。macOS 或瀏覽器可能會保留舊位址一段時間。
  • 代理伺服器或 App 自己的 DNS。使用代理伺服器時,名稱由代理伺服器查詢。有些 App 也有自己的 DNS 設定。

如何檢查

  1. 顯示檔案內容。

    cat /etc/hosts
  2. 向 macOS 解析器查詢該名稱,結果必須是檔案中的位址。

    dscacheutil -q host -a name example.com
  3. 顯示系統的代理伺服器設定。代理伺服器會自行查詢名稱。

    scutil --proxy

如何修正

  1. 以管理者身分在文字編輯器中打開檔案。

    sudo nano /etc/hosts

    需要管理者密碼。

  2. 每個名稱加一行。IP 位址放最前面,後面接一個或多個名稱。

    127.0.0.1   example.com www.example.com
  3. 儲存檔案。在 nano 中,按 Control-O,再按 Return,然後按 Control-X。

  4. 清除 DNS 快取。請參閱清除 Mac 上的 DNS 快取。

    sudo killall -HUP mDNSResponder

    需要管理者密碼。

  5. 結束瀏覽器再重新打開。

  6. 如果 App 使用代理伺服器,就不透過代理伺服器測試,或在代理伺服器上加入這個項目。

常見問題

需要重新啟動 Mac 嗎?

不需要。儲存檔案、清除 DNS 快取,再重新打開 App。

可以使用 *.example.com 這類萬用字元嗎?

不行。hosts 檔案的格式包含位址、正式主機名稱和別名。每個名稱都要寫在該行中。

資料來源

資料來源檢查日期:2026年10月29日。man 頁面為 macOS 內建版本;在終端機中用 man <name> 開啟。