網站從新浪 SAE 遷移至自有域名,舊域名(如 101ban.sinaapp.com)仍可訪問,會造成內容重複、權重分散。必須實施 301 永久重定向,告知搜尋引擎網址永久變更。
config.yaml 重寫規則(推薦,效能最佳)SAE 使用 AppConfig 語法,在 config.yaml 中定義 handle 區塊:
handle:
- rewrite: if(in_header["host"] ~ "^101ban\.sinaapp\.com" && path ~ "^(.*)$") goto "https://新域名/hongzhiban$1 [L,QSA,R=301]"
in_header["host"]:匹配請求 Host 頭~:正則匹配運算子path ~ "^(.*)$":捕獲完整路徑至 $1goto:重導向目標,支援 Apache 風格旗標:
L (Last) 停止後續規則QSA (Query String Append) 保留原查詢字串R=301 發送 301 狀態碼app.conf(實測可能不生效)BAE 同樣支援重寫規則,但實測 app.conf 修改有時不生效,建議改用應用層 PHP 方案。
在入口檔案(如 WordPress header.php、框架 index.php、公共 config.php)最頂部加入:
<?php
// 定義標準域名
$canonical_host = 'www.111cn.net';
if ($_SERVER['SERVER_NAME'] !== $canonical_host) {
// 保留原路徑與查詢字串
$redirect_url = 'https://' . $canonical_host . $_SERVER['REQUEST_URI'];
header('HTTP/1.1 301 Moved Permanently');
header("Location: $redirect_url");
exit; // 關鍵:阻止後續輸出
}
?>
$_SERVER['SERVER_NAME'] 而非 HTTP_HOST,前者為伺服器配置值,較難偽造。REQUEST_URI 確保深層連結正確跳轉(如 /article/123 → /article/123)。HTTP/1.1 301 明確告知永久遷移。exit 而非 die():語義更清晰,效果相同。header() 失效。編輯主題 functions.php(優於 header.php,不受主題更新影響):
<?php
add_action('template_redirect', 'force_canonical_domain');
function force_canonical_domain() {
$canonical = 'https://www.111cn.net'; // 建議強制 HTTPS
$current = (is_ssl() ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
if (strpos($current, $canonical) !== 0) {
wp_redirect($canonical . $_SERVER['REQUEST_URI'], 301);
exit;
}
}
?>
# 命令列測試
curl -I https://101ban.sinaapp.com/some/page
# 預期回應
HTTP/1.1 301 Moved Permanently
Location: https://www.111cn.net/hongzhiban/some/page
...
Content-Type: text/html; charset=UTF-8
sitemap.xml 為新域名SAE 首選 config.yaml 重寫(效能最好、無 PHP 開銷);BAE 若配置不生效、或通用部署環境,PHP 兜底方案可靠且可攜帶。核心原則:301 永久、保留路徑、頂部執行、及時退出。配合搜尋引擎站長工具提交改版,可最大程度保留 SEO 資產。