Redirecionar o site inteiro para uma única página

10

Preciso redirecionar um site inteiro do WordPress para uma única página do WordPress. Uma espécie de modo de manutenção, mas o redirecionamento precisa ir para uma página publicada do WordPress. Infelizmente, a página de manutenção que preciso mostrar precisa usar outros plugins do WordPress.

Não conheço nenhum plug-in do Modo de Manutenção que permita fazer isso. No máximo, eles permitem que você escreva códigos HTML / CSS personalizados.

Eu estava pensando em uma regra .htaccess mod_rewrite. No entanto, sou muito fraco com mod_rewrite.

Primeiro, desabilitei os redirecionamentos canônicos .

Então, tentei usar:

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

No entanto, essas regras geram loops de redirecionamento. page_id=813é o ID da minha página de manutenção, é claro.

Alguém conhece um plug-in do modo de manutenção que redireciona para uma página publicada?

Como alternativa, alguém pode me ajudar a corrigir as regras do mod_rewrite? Felicidades extras se pudermos deixar de /wp-adminfora as regras de redirecionamento.

shea
fonte

Respostas:

14

Na verdade, você pode fazer isso a partir do próprio WordPress, em vez de precisar de uma correção .htaccess confusa e com excesso de engenharia.

Podemos nos conectar ao template_redirectfiltro, que é acionado apenas no front-end (não no wp-admin). Em seguida, usamos a is_page()função para verificar se estamos visualizando uma página com o ID 813. Caso contrário, redirecione para essa página usando a wp_redirect()função

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

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

Isso funcionará muito bem no modo de manutenção, pois o redirecionamento é feito com o cabeçalho HTTP 'temporário' 302, informando aos bots e aos mecanismos de pesquisa que seu site estará em breve. No entanto, se você estiver movendo permanentemente o site, convém usar um cabeçalho HTTP 'permanente' 301 para o redirecionamento. Você pode fazer isso adicionando um segundo parâmetro à wp_redirectfunção. Exemplo:

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

    wp_redirect( esc_url_raw( home_url( 'index.php?page_id=183' ) ), 301 );
    exit;
} );
shea
fonte
Isso funciona muito bem para o meu propósito também. Exceto pela adição de um toque - o site está "inativo" para sempre e eu quero manter o WP ativo e funcionando, servindo a página de despedida como a página inicial. Existe uma maneira de adicionar um cabeçalho 301 a esse tipo de redirecionamento para SEO?
Tapefreak
@ Tapefreak Você pode definir o cabeçalho HTTP como o segundo parâmetro da wp_redirectfunção. Exemplo:wp_redirect( home_url( 'index.php?page_id=183' ), 301 );
shea
1

Incorporei a resposta aceita pelo @shea em um plug-in de um arquivo e adicionei duas opções: redirecionar apenas usuários não administrativos e redirecionar para um URL arbitrário.

Se estiver interessado, faça o download do plugin no Github => https://github.com/Idearia/wp-redirect-website-to-url .

Opções

As opções do plugin são muito simples; por enquanto, eles são codificados no arquivo de plug-in, mas posso considerar a criação de uma página de opção se as pessoas solicitarem:

  • DESTINATION_URL : o URL completo para onde redirecionar os usuários; pode ser uma página fora do domínio do site.
  • DESTINATION_URL_ID : se o URL de redirecionamento for uma página ou postagem do WordPress, especifique aqui seu ID do WordPress.
  • USER_CAPABILITY : usuários com esse recurso não serão redirecionados; deixe em branco para redirecionar todos; o padrão é 'manage_options', que é ativado para usuários administrativos.
  • REDIRECT_STATUS_CODE : Status de redirecionamento: 302 para redirecionamento temporário, 301 para redirecionamento permanente.
  • DEBUG : Se deseja imprimir informações de depuração no debug.log.

Informações atualizadas na página do Github => https://github.com/Idearia/wp-redirect-website-to-url .

Por favor note que o plugin é muito básico; usuários mais avançados podem considerar um dos muitos plugins de manutenção disponíveis no repositório de plugins WordPress.org.

Entre em contato se tiver algum problema ao executar o plug-in.

Guido Walter Pettinari
fonte
0

Eu iria para uma solução muito mais simples. Suponho que você deseja que apenas alguém veja apenas uma página - não é necessário que nenhuma página WP seja visível - para qualquer solicitação de seu domínio.

Portanto, por que não criar uma página HTML, estilize-a com algum CSS e coloque essa página em outra pasta na sua plataforma de hospedagem. Verifique se a página parece com a desejada.

Em seguida, aponte seu domínio para a nova pasta. Na maioria das plataformas de hospedagem, você pode especificar a pasta base de um domínio. Portanto, aponte seu domínio para a nova pasta base. Não há necessidade de redirecionamentos complicados do htaccess, plug-ins do WP ou filtros especiais para conectar-se ao WP.

Ou então, você pode mover todo o conteúdo das pastas raiz do domínio atual e colocar seu arquivo HTML simples no lugar.

Os locais de hospedagem também podem ter um 'redirecionamento global' para qualquer solicitação para qualquer página do seu domínio.

De qualquer maneira, seria uma solução simples para as suas necessidades e ter apenas uma página para todo o domínio.

Se você realmente deseja uma solução htaccess, use esta:

RewriteEngine on

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

..substituindo com seu domínio real.Faz SEO feliz também.

Rick Hellewell
fonte