Como você pode usar o mod_rewrite para redirecionar vários URLs específicos contendo várias strings de consulta?

2

migramos recentemente um site de um CMS personalizado para o drupal. Em um esforço para preservar alguns links que nossos usuários marcaram (temos cerca de 120 redirecionamentos), gostaríamos de encaminhar os URLs originais para um novo URL.

Eu tenho procurado por alguns dias, mas parece que não consigo encontrar nada simples para o que eu preciso.

Temos URLs existentes que contêm uma ou mais strings de consulta, por exemplo: /article.php?issue_id=12&article_id=275

e gostaríamos de encaminhar para o novo local: link

Eu comecei a usar:

RewriteEngine On  
RewriteRule ^/article\.php?issue_id=12&article_id=275$ http://foobar.edu/content/super-happy-fun-article [R=301,L]  

Isso, no entanto, não funciona.

Um simples RewriteRule funciona:

RewriteRule ^test\.php$ index.php  

Não está claro para mim como eu preciso usar {QUERY_STRING} com vários

Basicamente, são 120 redirecionamentos simples que vão de um URL existente para um novo. Não preciso de intervalos [0-9], porque não há ordem sequencial para URLs existentes.

Talvez eu possa fazer o que preciso com RewriteMap e um arquivo de texto simples que contenha uma linha como esta:

index.php?issue_id=12&articleType_section=0&articleType_id=65 http://foobar.edu/category/fall-2008

Se alguém tiver alguma idéia sobre o uso do mod_rewrite para fazer isso ou se houver um mod melhor ou mais simples, também estou aberto a isso.

Obrigado!

    
por Derek 14.01.2011 / 16:45

3 respostas

1

Não é realmente eficiente fazer uma regra de reescrita para cada link desatualizado possível. Então provavelmente sua melhor opção é emitir um redirecionamento php para o novo link. Crie uma função 'generateLink' que analise o $ _REQUEST e crie o link 'new', em seguida, emita um header("Location: $newLink", '', 301) . Chame generateLink () na parte superior do article.php , antes que qualquer saída seja gerada (caso contrário, o header () falhará)

    
por 14.01.2011 / 17:09
0

Se você precisa fazer isso rápido, você não pode simplesmente escrever um novo article.php para a página drupal correta?

<?php

$locations[12][275] = 'content/super-happy-fun-article';
$issue = $_GET['issue_id'];
$article = $_GET['article_id'];
if(isset($locations[$issue][$article]){
 $go = $locations[$issue][$article];
}
else{
 $go = 'broken_link'
}

header( 'Location: http://www.yoursite.com/'. $go );
    
por 19.01.2011 / 06:39
0

RewriteRules (por padrão) só funciona na parte da URL, não na parte da consulta (a parte por trás da?). Para construir regras que disparam dependendo da parte da consulta, você precisa definir condicionais para a string de consulta

RewriteCond %{QUERY_STRING} ^issue_id=12&article_id=275$
RewriteRule ^/article\.php http://foobar.edu/content/super-happy-fun-article [R=301,L]

Para obter algo como você solicitou.

Mas com 120 redirecionamentos, a ideia de usar um article.php personalizado é melhor.

    
por 19.01.2011 / 21:39