問題描述
我需要將整個 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。