在 WordPress 中做「依訪客的 IP 所屬國家,自動轉址到指定網址」有三條常見路徑,可依你掌握的權限與技術挑選:
方法 | 難度 | 優點 | 可能限制 |
---|---|---|---|
A. 外掛 (最省事) | ★☆☆ | 不必寫程式;後台 UI 設定就能管理規則 | 若流量大,免費版查詢次數或資料庫精度可能不足 |
B. functions.php + MaxMind GeoIP | ★★☆ | 完全本地查詢,速度快、隱私佳;可自訂邏輯 | 需會 FTP/SSH,上傳 DB 與排程更新 |
C. 代理層 / CDN (Cloudflare, nginx geoip2) | ★★☆ | 把判斷寫在邊緣節點,伺服器零負擔 | 需能調整 DNS/CDN 或伺服器設定 |
A. 外掛快速解
-
安裝外掛
-
後台 → 外掛 → 安裝外掛,搜尋以下其中一個:
- IP2Location Redirection
- Geolocation IP Detection + Redirection
- GeoRedirects
-
-
匯入資料庫(大部分外掛會幫你下載免費的 GeoLite2 或 IP2Location LITE)。
-
設定規則
- 例:當 Country = “CN” 時 → 301 轉址到
https://cn.example.com
。 - 可多國家、多條件(包含/排除路徑)。
- 例:當 Country = “CN” 時 → 301 轉址到
-
儲存 → 清快取測試。
- 用 VPN 或 https://iplocation.net 測試指定國家是否被導向。
B. 自行加程式(functions.php 範例)
前提:伺服器可裝 PHP extension
geoip2
或 你放置 MaxMind GeoLite2-Country.mmdb 檔案。
// functions.php
use GeoIp2\Database\Reader;
add_action('init', function() {
// 只在前台執行,排除 wp-admin
if (is_admin()) return;
// 要排除自己測試用 IP 時可先 if( $_SERVER['REMOTE_ADDR']=='xx.xx.xx.xx') return;
// 讀取 MaxMind 本地資料庫
$reader = new Reader(__DIR__ . '/geolite/GeoLite2-Country.mmdb');
$record = $reader->country($_SERVER['REMOTE_ADDR']);
$country = $record->country->isoCode; // 兩碼國碼,例如 CN、US
// 若在中國 → 導向
if ($country === 'CN') {
wp_redirect('https://cn.example.com', 301);
exit;
}
});
- 資料庫更新:註冊 MaxMind 帳號後可取得下載連結;用
wget
+ cron job 每週自動覆蓋即可。 - 效能:本地 look-up <1 ms,不會明顯拖慢 TTFB。
C. CDN/伺服器層
1. Cloudflare Workers(免寫伺服器程式)
export default {
async fetch(request, env, ctx) {
const country = request.headers.get('cf-ipcountry'); // 由 CF 自動注入
if (country === 'CN') {
return Response.redirect('https://cn.example.com' + new URL(request.url).pathname, 301);
}
return fetch(request);
}
}
- 將 Workers 綁到主網域 (Route:
example.com/*
) 即可。 - 不消耗 WordPress/PHP 資源。
2. Nginx + geoip2 module
geoip2 /etc/nginx/GeoLite2-Country.mmdb {
auto_reload 60m;
$geoip2_data_country_code country iso_code;
}
map $geoip2_data_country_code $redirect_cn {
default 0;
CN 1;
}
server {
location / {
if ($redirect_cn) {
return 301 https://cn.example.com$request_uri;
}
try_files $uri $uri/ /index.php?$args;
}
}
常見注意事項
-
多語系 SEO:
- 若僅因合規/分支站需求才轉址,建議用
301
。 - 若只是語言建議,可用 302 或
Accept-Language
+ banner 提示,避免搜尋引擎被硬轉。
- 若僅因合規/分支站需求才轉址,建議用
-
快取:確保 CDN/WebServer 依 IP 做分割快取,或用 Edge Function 先判斷再取快取。
-
GDPR / 隱私:本地資料庫優於即時 API,可避免傳輸使用者 IP 給第三方。
-
測試:用 VPN / Proxy / cURL 加
--header "X-Forwarded-For: 1.2.3.4"
模擬不同國家。
結論
- 想快速上手 → 安裝外掛,三分鐘搞定。
- 追求輕量可控 → functions.php + MaxMind。
- 已用 Cloudflare 或自己管 nginx → 寫 Workers/伺服器規則 將邏輯搬到邊緣。
選擇最符合你現有架構與維運能力的方案即可。若需要範例程式或伺服器設定檔的完整版本,再告訴我!