Você pode usar a Include
diretiva httpd.conf
para manter os redirecionamentos em outro arquivo. Mas isso não seria muito eficiente, pois cada solicitação precisaria ser comparada com muitas expressões regulares. Além disso, seria necessário reiniciar o servidor após cada alteração no arquivo.
Uma maneira melhor para tantos redirecionamentos seria usar a diretiva RewriteMap do tipo dbm
para declarar um mapa dos URIs para redirecionamentos. Dessa forma, será eficiente, pois as pesquisas no 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 do mapa.
As regras de reescrita seriam assim (testadas 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
assim:
/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
!=
e""
- Corrigi meu exemplo para uma versão funcional e testada agora.?
no URL), mas também é possível . Como agora, basta adicionar uma string de consulta para redirecionar, por exemplohttp://yourserver.com/foo?q=bar
, redirecionar parahttp://serverfault.com/?q=bar
.RewriteMap redirects dbm=db:/etc/httpd/conf/redirects.db
deu erroRewriteMap dbm type db is invalid
. Mas quando eu useiRewriteMap redirects txt:/etc/httpd/conf/redirects.txt
funcionou. Eu ainda quero seguir o caminho hash como você explicou, em vez de texto simples. Mas não consegui encontrar muito sobre o erro dbm. Obrigado pela ajuda.Eu escreveria um script que gera um novo VHOST com apenas os links da lista.
fonte