Apache: Qual é a melhor maneira de lidar com milhares de redirecionamentos permanentes?

20

Temos uma lista de redirecionamentos de 3000 301. Precisamos de ajuda em

  1. Qual seria o melhor lugar para colocar isso? Parece que colocar essas 3000 linhas dentro do vhost no httpd.conf seria uma bagunça.
  2. Quais são as formas recomendadas para lidar com milhares de URLs?
  3. O quanto isso afetará a velocidade de carregamento da página e a carga do servidor apache?

Obrigado.

    
por ucker 04.08.2012 / 10:26

2 respostas

30

Você pode usar a diretiva Include em httpd.conf para poder manter redirecionamentos em outro arquivo. Mas não seria muito eficiente, pois cada solicitação precisaria ser verificada em relação a muitas expressões regulares. Além disso, uma reinicialização do servidor seria necessária após cada alteração no arquivo.

Uma maneira melhor para muitos redirecionamentos seria usar a diretiva RewriteMap do tipo dbm para declarar um mapa de URIs para redirecionamentos. Dessa forma, ele será eficiente, pois as pesquisas de dbm são muito rápidas e, após uma alteração no mapa, você não precisaria reiniciar um servidor, pois httpd verifica o tempo de modificação do arquivo de mapeamento.

Uma regra de reescrita seria assim (testada no meu computador Fedora 16):

RewriteEngine On
RewriteMap redirects dbm=db:/etc/httpd/conf/redirects.db
RewriteCond ${redirects:$1} !=""
RewriteRule ^(.*)$ ${redirects:$1} [redirect=permanent,last]

E o mapa dbm seria criado a partir do mapa de texto /etc/httpd/conf/redirects.txt com esta aparência:

/foo http://serverfault.com/
/bar/lorem/ipsum/ http://stackoverflow.com/

usando um comando

httxt2dbm -f db -i /etc/httpd/conf/redirects.txt -o /etc/httpd/conf/redirects.db
    
por 04.08.2012 / 12:58
2

Eu escreveria um script que gera um novo VHOST apenas com os links da lista.

    
por 04.08.2012 / 10:27