Apache2 e rewritemap – horas de tentativas

Apache2 e rewritemap – horas de tentativas

Eu fiquei com o problema de rewritemap.

O que eu quero fazer é redirecionar milhares de URLs antigos quase aleatórios para novos. Construirei o mapa manualmente, mas preciso que esse código funcione.

RewriteCond %{HTTP_HOST}%{REQUEST_URI}\?%{QUERY_STRING} (^example\.com.abcd.cat_4)(.*)
RewriteRule .* ${url_rewrite_map:$1|NOTFOUND}? [R=301,L]

Gostaria que o mapa ficasse assim:

example.com/abcd/cat_4 http://example.com/345_exact_address_of_page

URLs antigos se parecem com:

http://example.com/abcd/cat_4=0?Xi4B7WoN;;54

e quero que eles reescrevam em:

http://example.com/345_exact_address_of_page

Tentei muitas coisas, mas não consigo fazer funcionar... Você pode me ajudar com isso?

Responder1

Você está usando $1 como chave de pesquisa em seu mapa, mas esse parâmetro contém apenas o que você captura no RewriteRule. As strings capturadas em seu RewriteCond são capturadas em %1, %2 etc...

Portanto, você deve usar algo como:

RewriteCond %{HTTP_HOST}   (^example\.com)
RewriteCond %{REQUEST_URI} (/abcd/cat_4)
RewriteRule .* ${url_rewrite_map:%1%2|NOTFOUND} [R=301,L]

Responder2

OK, consegui funcionar. Para qualquer outra pessoa, aqui está a solução.

RewriteCond %{HTTP_HOST}%{REQUEST_URI}\?%{QUERY_STRING} (^example\.com.abcd.abcd=.*)
RewriteRule .* ${url_rewrite_map:%1|$1}? [R=301,L]

Para responder à resposta de Krist van Besien: Acredito que você não pode usar %1%2%3 como usar uma linha antes, duas linhas antes, etc. %n refere-se apenas à última linha RewriteCond, então tive que colocar tudo em uma linha e em seguida, verifique o mapa. Mas obrigado de qualquer maneira, você me empurrou na boa direção :)

informação relacionada