Redireccionar todo el sitio web a una sola página

10

Necesito redirigir todo un sitio de WordPress a una sola página de WordPress. Una especie de modo de mantenimiento, pero la redirección debe ir a una página publicada de WordPress. Desafortunadamente, la página de mantenimiento que necesito mostrar tiene que usar otros complementos de WordPress.

No conozco ningún complemento de Modo de mantenimiento que le permita hacer esto. A lo sumo, le permiten escribir código HTML / CSS personalizado.

Estaba pensando en una regla .htaccess mod_rewrite. Sin embargo, soy muy débil con mod_rewrite.

Primero, deshabilité las redirecciones canónicas .

Entonces, traté de usar:

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

Sin embargo, estas reglas generan bucles de redireccionamiento. page_id=813es la identificación de mi página de mantenimiento, por supuesto.

¿Alguien sabe de un complemento de modo de mantenimiento, que redirige a una página publicada?

Alternativamente, ¿alguien puede ayudarme a arreglar las reglas mod_rewrite? Saludos adicionales si podemos dejar de /wp-adminlado las reglas de redireccionamiento.

Ella a
fuente

Respuestas:

14

En realidad, puede hacer esto desde el propio WordPress, en lugar de tener que encontrar una solución .htaccess confusa y de ingeniería excesiva.

Podemos conectarnos al template_redirectfiltro, que solo se dispara en el front-end (no en wp-admin). Luego usamos la is_page()función para verificar si estamos viendo una página con el ID de 813. Si no, redirige a esa página usando la wp_redirect()función.

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

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

Esto funcionará muy bien para un modo de mantenimiento, ya que la redirección se realiza con el encabezado HTTP 302 'temporal', lo que les permite a los bots y a los motores de búsqueda saber que su sitio estará listo pronto. Sin embargo, si está moviendo permanentemente el sitio, es posible que desee utilizar un encabezado HTTP 301 'permanente' para la redirección. Puede hacer esto agregando un segundo parámetro a la wp_redirectfunción. Ejemplo:

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

    wp_redirect( esc_url_raw( home_url( 'index.php?page_id=183' ) ), 301 );
    exit;
} );
Ella a
fuente
Esto funciona muy bien para mi propósito también. Excepto agregar un giro: el sitio está "inactivo" para siempre y quiero mantener a WP en funcionamiento sirviendo la página de despedida como página de inicio. ¿Hay alguna manera de agregar un encabezado 301 a este tipo de redireccionamiento para SEO?
Tapefreak
@Tapefreak Puede establecer el encabezado HTTP como el segundo parámetro de la wp_redirectfunción. Ejemplo:wp_redirect( home_url( 'index.php?page_id=183' ), 301 );
karité
1

He incrustado la respuesta aceptada por @shea en un complemento de un archivo, y agregué dos opciones: redirigir solo usuarios no administradores y redirigir a una URL arbitraria.

Si está interesado, no dude en descargar el complemento de Github => https://github.com/Idearia/wp-redirect-website-to-url .

Opciones

Las opciones del complemento son muy simples; por el momento, están codificados en el archivo del complemento, pero podría considerar crear una página de opciones si la gente lo solicita:

  • DESTINATION_URL : la URL completa donde redirigir a los usuarios; puede ser una página fuera del dominio del sitio web.
  • DESTINATION_URL_ID : si la URL de redireccionamiento es una página o publicación de WordPress, especifique aquí su ID de WordPress.
  • USER_CAPABILITY : los usuarios con esta capacidad no serán redirigidos; déjelo en blanco para redirigir a todos; el valor predeterminado es 'manage_options', que está habilitado para usuarios administradores.
  • REDIRECT_STATUS_CODE : estado de redireccionamiento: 302 para redireccionamiento temporal, 301 para redireccionamiento permanente.
  • DEPURACIÓN : si se imprime información de depuración en debug.log.

Información actualizada en la página de Github => https://github.com/Idearia/wp-redirect-website-to-url .

Tenga en cuenta que el complemento es muy básico; los usuarios más avanzados podrían considerar en cambio uno de los muchos complementos de mantenimiento disponibles en el repositorio de complementos de WordPress.org.

Avíseme si tiene algún problema al ejecutar el complemento 😊

Guido Walter Pettinari
fuente
0

Yo buscaría una solución mucho más simple. Supongo que solo desea que cualquiera vea solo una página, sin necesidad de que ninguna página de WP esté visible, para cualquier solicitud de su dominio.

Entonces, ¿por qué no crear una página HTML, diseñarla con un poco de CSS y poner esa página en otra carpeta en su plataforma de alojamiento? Asegúrate de que la página se vea como quieres.

Luego simplemente apunte su dominio a esa nueva carpeta. Con la mayoría de las plataformas de alojamiento, puede especificar la carpeta base de un dominio. Así que apunte su dominio a esa nueva carpeta base. No es necesario realizar redireccionamientos complicados de htaccess, ni complementos de WP, ni filtros especiales para enganchar en WP.

O bien, puede mover todo el contenido fuera de la (s) carpeta (s) raíz del dominio actual y colocar su archivo HTML simple en su lugar.

Los sitios de alojamiento de mayo también tienen una 'redirección global' para cualquier solicitud a cualquier página de su dominio.

De cualquier manera, sería una solución simple a sus necesidades de tener solo una página para todo su dominio.

Si realmente desea una solución htaccess, use esta:

RewriteEngine on

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

... reemplazando con su dominio real. Hace SEO feliz también.

Rick Hellewell
fuente