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