Pergunta

Como faço para redirecionar todos os pedidos de favicon.ico no diretório raiz ou qualquer subdiretório para /images/favicon.ico

Foi útil?

Solução

Experimente esta regra:

RewriteEngine on
RewriteRule ^favicon\.ico$ /images/favicon.ico [L]

EditarE para favicon.ico Com profundidade de segmento de caminho arbitrário:

RewriteCond $0 !=images/favicon.ico
RewriteRule ^([^/]+/)*favicon\.ico$ /images/favicon.ico [L]

Outras dicas

Para um favicon em www.mysite.com/images/favicon.icoO método mais robusto seria:

RewriteCond %{REQUEST_URI} !^/images/favicon\.ico$ [NC]
RewriteCond %{HTTP_HOST} (.+)
RewriteRule ^(.*)favicon\.(ico|gif|png|jpe?g)$ http://%1/images/favicon.ico [R=301,L,NC]

Explicação:

RewriteCond %{REQUEST_URI} !^/images/favicon\.ico [NC] :
- Garante que a regra de redirecionamento não se aplique se o URI correto for solicitado (por exemplo, um redirecionamento 301 escreverá o Uri Correto do Favicon para o Cache do navegador - e essa linha evitará o processamento da regra se o navegador solicitar o URI correto)
- [NC] significa que não é sensível ao caso

RewriteCond %{HTTP_HOST} (.+) :
- Recupera o nome do host http - para evitar codificar o nome do host no RewriteRule
- Isso significa que você pode copiar seu arquivo .htaccess entre servidor local/de teste e servidor de produção sem problemas (ou a necessidade de re-hardcode seu novo URL base do site em seu reescritor)

RewriteRule ^(.*)favicon\.(ico|gif|png|jpe?g)$ http://%1/images/favicon.ico [R=301, L] :
- ^ é o começo do regex
- (.*) é um grupo curinga - o que significa que pode haver zero ou qualquer número de caracteres antes da palavra favicon No URI (ou seja, esta é a parte que permite que o diretório raiz ou qualquer subdiretor seja incluído na partida URI)
- \.(ico|gif|png|jpe?g) verifica se a extensão URI corresponde a qualquer um dos .ico, .gif, .png, .jpg, .jpeg
- $ é o fim do regex
- http://%1/images/favicon.ico é o URL de redirecionamento - e injeta o nome do host que recuperamos no anterior RewriteCond. Observe que o %1 é um chamado Reescreva -se reescrita de referência isso significa que é o último RewriteCond isso foi atendido. (por exemplo: %2 Seria o 2º eixo RewriteCond isso para ter sido atendido)
- R=301 Significa que é um redirecionamento permanente - que armazena o redirecionamento no cache do navegador. Tenha cuidado ao testar - você precisará excluir o cache do navegador entre as alterações do código ou o redirecionamento não atualizará. Provavelmente deixe isso de fora até saber que a regra funciona.
- L significa que é o último redirecionamento a ser seguido neste .htaccess Arquivo - Você não precisará disso para que a regra funcione, pois a linha 1 não será atendida assim que o navegador for direcionado para o URL correto. Sem a linha 1 ou L O reescriture resultará em um loop permanente (uma vez que o URL de redirecionamento continuará satisfazendo o RewriteRule condições). No entanto, é uma boa ideia adicionar o L De qualquer forma, se você tiver outras regras após as regras do Favicon - já que, em uma solicitação Favicon.ICO, você pode (provavelmente) ignorar as seguintes regras.

Você pode testar .htaccess regras em http://htaccess.mwl.be/

Nota final:
- Tenha cuidado para não ter nenhum outro reescriteiro em um .htaccess arquivo localizado em qualquer um dos seus subdiretos.
- por exemplo, se você colocar isto responda em seu www.mysite.com/ pasta raiz .htaccess arquivo, a RewriteRule (.*) xxx Digite regra em seu www.mysite.com/images/ A pasta pode mexer com os resultados.

RewriteEngine on

RewriteRule ^(.*)favicon\.ico /images/favicon.ico [L]

Eu sei que a pergunta está marcada .htaccessMas, por que não usar um symblink?

ln -s images/favicon.ico favicon.ico

Esta rápida reescrita deve fazer o truque:

RewriteRule ^(.*)favicon.ico /images/favicon.ico
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top