Temo que isso seja pedir demais aqui, então, se estiver, sinta-se à vontade para falar de outro lugar para aprender.
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:
Para mover o Wordpress do subdiretório para a raiz:
/wp /(.*) => /$1
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
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
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:
Como faço para criar a regra que diz "para tudo, exceto os arquivos já redirecionados como acima, faça isso"
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.
Agradecemos antecipadamente por toda e qualquer orientação.
Oi @CJN: ,
Sua primeira pergunta, movendo o diretório do WordPress é tratada de forma diferente do resto.
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);
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();
}
}
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.
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?
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):
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
}
}
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?
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.
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.