web-development-kb-pt.site

Criando 301 redirecionamentos para URLs de postagem, página, categoria e imagem?

Temo que isso seja pedir demais aqui, então, se estiver, sinta-se à vontade para falar de outro lugar para aprender.

Ajuda com redirecionamentos

Estou limpando um site mal desenvolvido e migrando o wordpress de um subdiretório. Passei horas tentando entender a logística de redirecionamentos e regex. Acho que estou dando conta disso, mas realmente aprecio a confirmação de que estou fazendo isso corretamente e qualquer conselho sobre as melhores práticas. Se alguém souber de bons tutoriais com exemplos de instruções, eu também apreciaria isso.

Se alguém souber de realmente plugins simples para isso, eu ficaria extremamente grato. Eu estive olhando o plugin do Redirections, mas acho muito confuso (dor de cabeça!). De qualquer forma, minhas idéias abaixo (fontes são seguidas por => depois alvo) são o que eu juntei das instruções do Redirections, screenshots e outros tutoriais que eu pesquisei. Tenho certeza que eles seriam aplicáveis ​​independentemente de eu colocá-los diretamente no arquivo .htaccess ou usar Redirecionamentos ou outro plugin?

Então, aqui está o que estou tentando realizar e como acho que precisa ser feito:

  1. Para mover o Wordpress do subdiretório para a raiz:

    /wp /(.*) => /$1
    
  2. Para todas as páginas atualmente dentro de subdiretórios na raiz, desejo excluir e/ou combinar várias páginas em uma página de nível superior:

    /products-directory /(.*) =>/produtos-top-level-page 
     
    /sobre-diretório /(.*) =>/about-top- página de nível 
     
    /diretório de serviços /(.*) =>/services-top-level-page 
    
  3. Para várias páginas de nível superior que correspondem a um padrão específico, quero direcioná-las para categorias específicas, por exemplo, Todos os nomes de arquivos começam com as mesmas duas palavras como: same-Word-variation-variation.html e eu quero que eles mantenham seus nomes de arquivos existentes - se eu definir meus permalinks para terminar com `.html`, isso funcionará , Acredito:

    /mesma palavra (. *) => /newcategory/$1
    

    Como eu criaria a regra se eu não tivesse permalinks terminando em `.html`? (Eu acho que vi! É o caracter "não", mas não sei como usar aqui - é isso):

    /mesma palavra (. *) => /newcategory/$1!\.html
    
  4. E então, uma vez que eu tenha as páginas específicas identificadas e redirecionadas como acima, eu vou deletar todo o resto (lixo) e quero mandar os usuários para a página inicial (ou talvez uma postagem aleatória?).

    Então, 2 perguntas aqui:

    1. Como faço para criar a regra que diz "para tudo, exceto os arquivos já redirecionados como acima, faça isso"

    2. Como eu impediria que essa regra fosse aplicada a novas páginas e postagens que eu criasse a partir de agora?

    Uma ideia é que ao excluir, eu estaria recebendo uma página 404 não encontrada, então eu deveria criar a regra para a própria página 404? É isso que eu quero fazer?

    Como eu disse, o site foi mal desenvolvido (com o cliente instruindo as pessoas a simplesmente "abrir uma página" sem nenhuma preocupação com arquitetura adequada, SEO, etc.) - praticamente não tem ranking nem links externos/de volta para se preocupar, mas eu quero entender a melhor abordagem de uma perspectiva de SEO e desenvolvimento adequado.

  5. Além disso, devo mover imagens existentes etc. para o diretório wp-content ou deixá-las em seus subdiretórios/s existentes? Minha inclinação é realmente ir para um 'clean-sweep' - se livrar de tudo o que parece desarrumado, mas não tenho certeza se isso seria mais trabalho do que vale a pena ...

Agradecemos antecipadamente por toda e qualquer orientação.

5
CJN

Oi @CJN: ,

Sua primeira pergunta, movendo o diretório do WordPress é tratada de forma diferente do resto.

Mover o WordPress de subdiretório para raiz:

Vá até /wp-config.php e adicione o seguinte a define (usando o domínio do seu cliente em vez de example.com, é claro):

define('WP_SITEURL', 'http://example.com');
define('WP_HOME',    WP_SITEURL);

301 Redirecionamentos usando template_loader e wp_safe_redirect()

Você pode resolver a maioria das suas questões modificando .htaccess como @ Kau-Boy mostra como, ou você pode fazer isso apenas em PHP . O WordPress tem um gancho template_redirect que você pode usar para isso junto com a função wp_safe_redirect() para redirecionar com um código de status HTTP 301. Como você pode ver, o resto é apenas brutal para o código PHP e um pouco de expressão regular mágica polvilhada. Você pode colocar este código praticamente em qualquer lugar no arquivo functions.php do seu tema:

add_action('template_redirect','my_template_redirect');
function my_template_redirect() {
  $redirect_to = false;
  list($url_path,$params) = explode('?',$_SERVER['REQUEST_URI']);
  $path_parts = explode('/',trim($url_path,'/'));
  switch ($path_parts[0]) {
    case 'products-directory':
      $redirect_to = '/products-top-level-page';
      break;
    case 'about-directory':
      $redirect_to = '/about-top-level-page';
      break;
    case 'services-directory':
      $redirect_to = '/services-top-level-page';
      break;
    default:
      if (preg_match('#same-Word(.*)#',$path_parts[0],$match)) {
        $category = str_replace('.html','',$match[1]);
        $redirect_to = "/newcategory/{$category}";
      } else {
        // Do whatever else you need here
      }
  }
  if ($redirect_to) {
    wp_safe_redirect($redirect_to,301);
    exit();
  }
}

Considere usabilidade e não apenas SEO?

Eu perguntaria se você realmente quer fazer o # 2? IMO que torna um site muito menos utilizável para usuários do que aquele que é otimizado apenas para SEO percebido (e como fundador e co-organizador de uma vez de este grupo eu não sou um neófito de SEO). em vez disso, veja você soltar o "-directory" do primeiro segmento do caminho da URL. JMTCW mesmo assim.

Gerando Páginas 404?

Se você precisar emitir um 404, você pode fazer isso com o cabeçalho:

header("HTTP/1.0 404 Not Found");
exit;

No entanto, acho que não é isso que você quer fazer, correto? Eu acho que você pode conseguir qualquer lógica de redirecionamento que você precisa modificando a função PHP acima e respondendo à requisição HTTP com um 301, certo?

Importando Imagens para a Biblioteca de Mídia e 301 Redirecionando

Você poderia movê-los para a biblioteca de mídia e isso permitiria que você os gerenciasse no futuro. Aqui está um plugin que pode ajudar (embora eu não tenha certeza se ele está trabalhando com o 3.0; se não, pode ser uma boa base de código para trabalhar de qualquer maneira):

URL da imagem de codificação em disco 301 redireciona usando uma matriz

Então, uma vez que seria uma única vez você poderia simplesmente codificar seus URLs de imagem em uma matriz e usá-los para combinar na sua função de redirecionamento. Modificando o padrão na instrução switch do código acima, ele pode se parecer com isto:

default:
  if (preg_match('#same-Word(.*)#',$path_parts[0],$match)) {
    $category = str_replace('.html','',$match[1]);
    $redirect_to = "/newcategory/{$category}";
  } else {
    $images = array(
      '/images/image1.jpg' => '/wp-content/uploads/2010/08/image1.jpg',
      '/images/image2.jpg' => '/wp-content/uploads/2010/08/image2.jpg',
      '/images/image3.jpg' => '/wp-content/uploads/2010/08/image3.jpg',
      );
    if (in_array($url_path,$images)) {
      $redirect_to = $images[$url_path];
    } else  {
      // Do whatever else you need here
    }
  }

Usando preg_match() para 301 Redirecionar imagens por padrão de URL

É claro que, se os URLs das imagens seguirem um padrão, você poderá simplificar muito ou todo o array de imagens usando uma preg_match(), assim:

if (preg_match('#^/images/(.*)$#',$url_path,$match)) {
  $redirect_to = "/wp-content/uploads/2010/08/{$match[1]}";
}

Espero que isto ajude?

8
MikeSchinkel

Existe um plugin para mudar de uma estrutura de permalink para outra, mas tenho certeza que isso não será suficiente para as suas necessidades. Você terá que usar algumas regras de reescrita .htaccess. Eu tento dar-lhe alguns exemplos para sua necessidade (não tenho certeza se eles estão todos corretos). Inclua todas essas linhas em um arquivo chamado ".htaccess" na raiz do seu servidor. Fora isso acima das regras do wordpress:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
# your rules start here. Keep the following lines that has been produced by wordpress
RewriteBase /
RewriteRule wp/(.*)$ /$1 [R=301]
RewriteRule /products-directory/(.*)$ /products-top-level-page [R=301]
RewriteRule /about-directory/(.*)$ /about-top-level-page [R=301]
RewriteRule /services-directory/$ /services-top-level-page [R=301]
RewriteRule /same-Word(.*)$ /newcategory/$1 [R=301]

O sinalizador [R = 301] dirá ao navegador do cliente ou mecanismo de pesquisa, que é um redirecionamento permanente.

Você provavelmente vai querer atualizar todos os permalinks dentro do seu banco de dados wordpress. Eu escrevi um artigo sobre atualização de string no banco de dados . Infelizmente ainda não traduzi o post. Mas as consultas devem ser claras, caso contrário, basta usar os documentos do MySQL.

1
2ndkauboy

Eu uso este: Simples 301 Redirecionamentos plugin - usado por algumas páginas antes, e eu estou em breve para mover o meu site web design com todos os seus arquivos e pastas dentro dos meus arquivos WP.

0
Steve Shearer