问题描述

我需要将整个 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。