問題描述

我需要將整個 WordPress 網站重定向到一個 WordPress 頁面。一種維護模式,但重定向必須轉到已釋出的 WordPress 頁面。不幸的是,我需要顯示的維護頁面必須使用其他 WordPress 外掛。

我不知道有任何維護模式外掛可以讓你這樣做。最多可以讓您編寫自定義 HTML /CSS 程式碼。

我在想一個.htaccess mod_rewrite 規則。但是,我對 mod_rewrite 非常弱。

首先,我是 disabled canonical redirects

然後,我試圖使用:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/index.php?page_id=813$
RewriteRule ^(.*)$ /index.php?page_id=813 [R=307,L]

但是,這些規則會生成重定向迴圈。當然,page_id=813 是我的維護頁面的 ID 。

有人知道維護模式外掛,哪個重定向到已釋出的頁面?

或者,有人可以幫助我修復 mod_rewrite 規則嗎?如果我們可以將/wp-admin 離開重定向規則,額外的歡呼聲。

最佳解決方案

你根本不需要.htaccess 來完成。一個.htaccess 的修復將會膨脹和超載。

相反,我們可以掛接到僅在 front-end(而不是 wp-admin) 中觸發的 template_redirect 過濾器。然後,我們使用 is_page()功能來檢查我們正在檢視的 ID 為 813 的頁面。如果沒有,請使用 wp_redirect()功能重定向到該頁面。

add_action( 'template_redirect', 'wpse_76802_maintance_mode' );

function wpse_76802_maintance_mode() {
    if ( ! is_page( 813 ) ) {
        wp_redirect( esc_url_raw( home_url( 'index.php?page_id=183' ) ) );
        exit;
    }
}

這將非常適用於維護模式,因為重定向是使用 302 ‘temporary’ HTTP 頭,讓機器人和搜尋引擎知道您的網站將很快上線。但是,如果您永久移動網站,則可能需要使用 301 ‘permanent’ HTTP 標頭進行重定向。您可以透過向 wp_redirect 函式新增第二個引數來執行此操作。例:

add_action( 'template_redirect', 'wpse_76802_goodbye_redirect' );

function wpse_76802_goodbye_redirect() {
    if ( ! is_page( 813 ) ) {
        wp_redirect( esc_url_raw( home_url( 'index.php?page_id=183' ), 301 ) );
        exit;
    }
}

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。