index.php,實現美觀永久連結WordPress 依賴 REQUEST_URI / PATH_INFO 解析路由。IIS 預設不支援 PATH_INFO,但我們可透過自訂 404 頁面 (PHP) 手動重建這兩個變數,再 include('index.php') 交由 WordPress 核心處理。
新建文字檔,命名 wp-404-handler.php,內容:
<?php
$qs = $_SERVER['QUERY_STRING'];
// 典型 IIS QUERY_STRING 格式: 404;https://domain.com:80/path/info
$_SERVER['REQUEST_URI'] = substr($qs, strpos($qs, ':80') + 3);
$_SERVER['PATH_INFO'] = $_SERVER['REQUEST_URI'];
include('index.php');
?>
關鍵點: strpos($qs, ':80') 假設網站跑在 80 埠;若為其他埠 (如 8080) 請自行調整。
/wp-404-handler.php。/wp-404-handler.php。後台 → 「設定」→「永久連結」→ 選擇任意結構 (如 /%postname%.html、/%category%/%postname%) → 存檔。完全視為 Linux 主機操作即可。
瀏覽文章頁、分類頁、標籤頁、搜尋頁、分頁,確認:
✅ 網址無 index.php
✅ 頁面正常顯示
✅ 分頁、評論、搜尋功能正常
/%postname%.html 或 /%post_id%.html — 扁平、偽靜態感強、SEO 友善。/%year%/%month%/%day%/%postname%) — 增加 404 判斷成本。| 現象 | 可能原因 | 解決 |
|---|---|---|
| 首頁正常,內頁全 404 | 404 處理器路徑錯誤 / 未生效 | 檢查控制台設定、檔案大小寫、路徑是否為站點根目錄相對路徑 |
| 網址仍含 index.php | WP 判斷為非 Apache 環境 | 確認 REQUEST_URI/PATH_INFO 正確重建;檢查 .htaccess 是否殘留干擾規則 |
| 中文網址亂碼/404 | URL 編碼/解碼不一致 | 確保 WP 版本 ≥ 4.2 (原生支援 UTF-8);檢查 PHP mbstring 擴充 |
| 後台媒體庫/上傳失效 | 路徑解析錯誤 | 檢查 wp-config.php 中 WP_CONTENT_URL 設定 |
IIS 收到請求 → 找不到實體檔案 → 觸發 404 → 執行 wp-404-handler.php → 手動建構 WordPress 所需的超全域變數 → include('index.php') 啟動 WP 核心 → WP 解析路由 → 輸出頁面。
整個過程對瀏覽器透明,狀態碼仍為 200 OK (WP 內部處理),搜尋引擎視為正常頁面。
「404 重導向法」是 Windows 虛擬主機跑 WordPress 偽靜態的零成本、零權限、高相容 終極方案。只要控制台支援自訂 404,幾分鐘即可完成,徹底告別醜陋的 index.php 網址。