将整个网站重定向到单个页面


10

我需要将整个WordPress网站重定向到单个WordPress页面。一种维护模式,但是重定向必须转到已发布的WordPress页面。不幸的是,我需要显示的维护页面必须使用其他WordPress插件。

我不知道有任何维护模式插件可让您执行此操作。最多,它们使您可以编写自定义HTML / CSS代码。

我正在考虑.htaccess mod_rewrite规则。但是,我对mod_rewrite非常虚弱。

首先,我禁用了规范重定向

然后,我尝试使用:

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重定向规则,则可以加倍加油。

Answers:


14

实际上,您可以从WordPress本身内部执行此操作,而无需提出令人困惑和过度设计的.htaccess修复程序。

我们可以连接到template_redirect过滤器,该过滤器仅在前端触发(在wp-admin中不触发)。然后,我们使用该is_page()功能检查是否正在查看ID为813的页面。如果不是,请使用该wp_redirect()功能重定向到该页面。

add_action( 'template_redirect', function() {
    if ( is_page( 813 ) ) {
        return;
    }

    wp_redirect( esc_url_raw( home_url( 'index.php?page_id=183' ) ) );
    exit;
} );

这对于维护模式非常有用,因为重定向是使用302“临时” HTTP标头进行的,它使漫游器和搜索引擎知道您的站点即将启动。但是,如果您要永久移动站点,则可能要使用301“永久” HTTP标头进行重定向。您可以通过向wp_redirect函数添加第二个参数来实现。例:

add_action( 'template_redirect', function() {
    if ( is_page( 813 ) ) {
        return;
    }

    wp_redirect( esc_url_raw( home_url( 'index.php?page_id=183' ) ), 301 );
    exit;
} );

这对我的目的也很好。除了增加一些改动外,该站点永远处于“关闭”状态,我希望保持WP正常运行,并将告别页面作为主页运行。有没有一种方法可以将301标头添加到此类SEO重定向中?
Tapefreak

@Tapefreak可以将HTTP标头设置为该wp_redirect函数的第二个参数。示例:wp_redirect( home_url( 'index.php?page_id=183' ), 301 );
shea

1

我已将@shea接受的答案嵌入一个文件插件中,并添加了两个选项:仅重定向非管理员用户和重定向到任意URL。

如果有兴趣,请随时从Github => https://github.com/Idearia/wp-redirect-website-to-url下载该插件。

选件

插件选项非常简单。目前,它们是硬编码在插件文件中的,但是如果有人要求,我可能会考虑构建一个选项页面:

  • DESTINATION_URL:将用户重定向到的完整URL。可以是网站域之外的页面。
  • DESTINATION_URL_ID:如果重定向URL是WordPress页面或帖子,请在此处指定其WordPress ID。
  • USER_CAPABILITY:具有此功能的用户将不会被重定向;留空以重定向所有人;默认值为'manage_options',已为管理员用户启用。
  • REDIRECT_STATUS_CODE:重定向状态:302用于临时重定向,301用于永久重定向。
  • DEBUG:是否在debug.log中打印调试信息。

Github页面上的更新信息=> https://github.com/Idearia/wp-redirect-website-to-url

请注意,该插件非常基本;更高级的用户可能会考虑使用WordPress.org插件存储库中提供的许多维护插件之一。

让我知道您是否在运行插件时遇到任何问题😊


0

我会寻求一个更简单的解决方案。我的假设是,对于您的域的任何请求,您只希望任何人仅看到一页-无需显示任何WP页。

因此,为什么不创建HTML页面,用一些CSS设置样式,然后将该页面放在托管平台上的另一个文件夹中。确保页面看起来像您想要的。

然后将您的域指向该新文件夹。在大多数托管平台上,您可以指定域的基本文件夹。因此,将您的域指向该新的基本文件夹。无需复杂的htaccess重定向,WP插件或特殊的过滤器即可挂接到WP。

或者,您可以将所有内容移出当前域的根文件夹,然后将其放入简单的HTML文件中。

对于对您域中任何页面的任何请求,托管位置也可能具有“全局重定向”。

无论哪种方式,对于您的整个域只有一个页面的情况,这都是一种简单的解决方案。

如果您真的想要htaccess解决方案,请使用以下解决方案:

RewriteEngine on

RewriteRule ^(.*)$ http://www.example.com/  [R=permanent,L]

..替换为您的实际域。也使SEO开心。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.