Template de .htaccess – Modelo simples focado em SEO

Já vi muitas pessoas perguntando como configurar a compressão gzip, ou fazer um sistema simples de cache. Então resolvi escrever esse artigo para que todos que tenham a mesma dúvida possam ter acesso a algumas dicas básicas em um só lugar.

Vou colocar aqui algumas configurações básicas que devem ser inseridas no arquivo .htaccess, que fica na raiz do site, caso esteja hospedado em um servido Apache. Caso esse arquivo ainda não exista, você pode criá-lo.

 

Segurança

Primeiramente, vamos bloquear a listagem das pastas quando não houver um documento padrão (index.html, index.php, default.asp, etc.). Por padrão, quando o servidor não encontrar nenhum desses arquivos, ele exibirá uma listagem dos subdiretórios. Na maioria dos casos, isso não é nem um pouco interessante.

<IfModule mod_autoindex.c>
    Options -Indexes
</IfModule>

Agora vamos eliminar a “assinatura” do servidor que é exibida nas páginas de erro:

ServerSignature Off

 

Compressão

Utilizando o gzip para fazer a compressão dos arquivos, você economiza banda e deixa o site mais rápido, pois o servidor envia o arquivo comprimido para o navegador, que por sua vez descompacta esses arquivos e exibe para o usuário.

<IfModule mod_deflate.c>
    <IfModule mod_setenvif.c>
        <IfModule mod_headers.c>
            SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
            RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
        </IfModule>
    </IfModule>

    <IfModule filter_module>
        FilterDeclare   COMPRESS
        FilterProvider  COMPRESS  DEFLATE resp=Content-Type $text/html
        FilterProvider  COMPRESS  DEFLATE resp=Content-Type $text/css
        FilterProvider  COMPRESS  DEFLATE resp=Content-Type $text/plain
        FilterProvider  COMPRESS  DEFLATE resp=Content-Type $text/xml
        FilterProvider  COMPRESS  DEFLATE resp=Content-Type $text/x-component
        FilterProvider  COMPRESS  DEFLATE resp=Content-Type $application/javascript
        FilterProvider  COMPRESS  DEFLATE resp=Content-Type $application/json
        FilterProvider  COMPRESS  DEFLATE resp=Content-Type $application/xml
        FilterProvider  COMPRESS  DEFLATE resp=Content-Type $application/xhtml+xml
        FilterProvider  COMPRESS  DEFLATE resp=Content-Type $application/rss+xml
        FilterProvider  COMPRESS  DEFLATE resp=Content-Type $application/atom+xml
        FilterProvider  COMPRESS  DEFLATE resp=Content-Type $application/vnd.ms-fontobject
        FilterProvider  COMPRESS  DEFLATE resp=Content-Type $image/svg+xml
        FilterProvider  COMPRESS  DEFLATE resp=Content-Type $image/x-icon
        FilterProvider  COMPRESS  DEFLATE resp=Content-Type $application/x-font-ttf
        FilterProvider  COMPRESS  DEFLATE resp=Content-Type $font/opentype
        FilterChain     COMPRESS
        FilterProtocol  COMPRESS  DEFLATE change=yes;byteranges=no
    </IfModule>

    <IfModule !mod_filter.c>
        AddOutputFilterByType DEFLATE text/html text/plain text/css application/json
        AddOutputFilterByType DEFLATE application/javascript
        AddOutputFilterByType DEFLATE text/xml application/xml text/x-component
        AddOutputFilterByType DEFLATE application/xhtml+xml application/rss+xml application/atom+xml
        AddOutputFilterByType DEFLATE image/x-icon image/svg+xml application/vnd.ms-fontobject application/x-font-ttf font/opentype
    </IfModule>

</IfModule>

 

ETag

Resumidamente, Entity tags (ETags) são um tipo de mecanismo feito para checar se existe uma nova versão do arquivo em cache. Com esse mecanismo desabilitado, nós impedimos que o cache ou o browser fiquem tentando fazer a validação, portanto ele é forçado a utilizar Cache-Control e Expires header (faleremos desses dois daqui a pouco).
Para disabilitar o ETag:

<IfModule mod_headers.c>
  Header unset ETag
</IfModule>

FileETag None

 

Cache

Combinado com o gzip, um cache bem configurado pode diminuir em até 90% o tempo de carregamento da página.

<IfModule mod_expires.c>
	ExpiresActive on
	ExpiresDefault                          "access plus 1 month"
	ExpiresByType text/cache-manifest       "access plus 0 seconds"

	# Html
	ExpiresByType text/html                 "access plus 0 seconds"

	# Data
	ExpiresByType text/xml                  "access plus 0 seconds"
	ExpiresByType application/xml           "access plus 0 seconds"
	ExpiresByType application/json          "access plus 0 seconds"

	# Feed
	ExpiresByType application/rss+xml       "access plus 1 hour"
	ExpiresByType application/atom+xml      "access plus 1 hour"

	# Favicon
	ExpiresByType image/x-icon              "access plus 1 week"

	# Media: images, video, audio
	ExpiresByType image/gif                 "access plus 1 month"
	ExpiresByType image/png                 "access plus 1 month"
	ExpiresByType image/jpg                 "access plus 1 month"
	ExpiresByType image/jpeg                "access plus 1 month"
	ExpiresByType video/ogg                 "access plus 1 month"
	ExpiresByType audio/ogg                 "access plus 1 month"
	ExpiresByType video/mp4                 "access plus 1 month"
	ExpiresByType video/webm                "access plus 1 month"

	# HTC files
	ExpiresByType text/x-component          "access plus 1 month"

	# Webfonts
	ExpiresByType application/x-font-ttf    "access plus 1 month"
	ExpiresByType font/opentype             "access plus 1 month"
	ExpiresByType application/x-font-woff   "access plus 1 month"
	ExpiresByType image/svg+xml             "access plus 1 month"
	ExpiresByType application/vnd.ms-fontobject "access plus 1 month"

	# CSS / JS
	ExpiresByType text/css                  "access plus 1 year"
	ExpiresByType application/javascript    "access plus 1 year"

</IfModule>

 

Internet Explorer =(

Essas diretivas irão melhorar o desempenho no nosso querido Internet Explorer, forçando-o a sempre carregar utilizando a última versão disponível (ou utilizar o chrome frame, caso esteja instalado):

<IfModule mod_headers.c>
    Header set X-UA-Compatible "IE=Edge,chrome=1"
    <FilesMatch "\.(js|css|gif|png|jpe?g|pdf|xml|oga|ogg|m4a|ogv|mp4|m4v|webm|svg|svgz|eot|ttf|otf|woff|ico|webp|appcache|manifest|htc|crx|oex|xpi|safariextz|vcf)$" >
        Header unset X-UA-Compatible
    </FilesMatch>
</IfModule>

 

Com “www” ou sem “www”

O trecho abaixo irá redirecionar http://dominio.com.br para http://www.dominio.com.br

RewriteCond %{HTTP_HOST} !^www\..+$ [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Dica por André Andrade.

Página 404 customizada

Outra dica do André Andrade: o trecho abaixo configura qual a página que será exibida quando uma url retornar o erro 404. Basta substituir o “/404.html” pelo endereço do arquivo que contém o conteúdo a ser exibido em caso de erro 404.

ErrorDocument 404 /404.html

Existem diversas outras instruções que pode ser utilizadas no .htaccess, como por exemplo redirecionamentos 301 e configuração de urls amigáveis. Minha intenção nesse artigo foi a de apenas disponibilizar um template bem básico, para ser utilizado apenas como um pontapé inicial na criação do seu .htaccess.

Até a próxima ;)

52 Comentários

  1. Excelente ! Admiro profissional com espirito igual o seu, a comunidade só tem a ganhar ! Continue assim, abraços.



    • André Mazzitelli

      Obrigado pelos elogios Emerson!

      A comunidade de SEO está sempre se ajudando e com isso, todos nós só temos a ganhar ;)



  2. André, muito legal seu artigo!
    Mas fiquei em dúvida pra que servem as medidas de segurança e o Etag. Você explicou bem a questão da compressão, mas senti falta dessas explicações nos outros itens.



    • André Mazzitelli

      Boa Anna Raquel! Muito bem lembrado!

      Ficou faltando a explicação sobre Etags… Já editei o artigo, veja se tira as suas dúvidas.

      Sobre as medidas de segurança, elas são bem simples e não devemos usá-las achando que todas as brechas de segurança foram tapadas. São duas medidas bem babacas, mas que não custa nada usar.

      A primeira, desabilita a listagem de subdiretórios. Se você acessar um endereço “www.meusite.com.br/diretorio” o servidor vai procurar por um arquivo padrão (index.php, index.html, default.asp) para exibi-lo. Caso ele não encontre, mostrará a lista de todos os arquivos e pastas desse diretório. Se essa configuração não estiver presente, o usuário poderá navegar livremente pelos diretórios e subdiretórios do site, ver todos os arquivos, imagens, documentos, etc.

      Já a segunda desabilita a “assinatura” do servidor. Se você acessar um página de erro, o servidor retornará a mensagem de erro e algumas informações (sistema operacional, servidor web e sua versão, etc). O ideal é desabilitar a exibição dessas informações.

      Essas duas medidas não estão muito ligadas a SEO, mas a idéia é montar um template de .htaccess básico. Se o pessoal mandar mais sugestções, vamos incrementando aqui e colocando as explicações aos poucos =D



  3. Anon

    .htaccess *



  4. Rodrigo

    André não sou de comentar em muitos lugares, mais o seu artigo sem duvida é um dos melhores que já li sobre .htacess

    Parabéns



    • André Mazzitelli

      Valeu Rodrigo!

      A intenção é ir reunindo algumas sugestões do pessoal aqui e fazer um template mais completo de .htaccess ;)

      Abraço!



  5. Bruno

    Muito bom Canatão! Um bom template é o do boilerplate que entendendo pra que servem as coisas você explicou muito bem, pode-se descomentar trecho correspondente. Além de ter outros recursos específicos.



  6. Parabéns chará!



  7. Obrigado, pelo conteudo



  8. Fabio Almeida

    Olá André!

    Sabe me informar como faço para implantar essas configurações direto nas configurações do
    Apache via httpd.conf ? Ficaria muito agradecido.



    • André Mazzitelli

      Fabio Almeida, praticamente a mesma coisa, mas vc tem q dizer qual o diretório que quer aplicar a configuração. Ex:

      <Directory "/var/www">
      Options -Indexes
      [...]
      </Directory>



  9. plastic

    Boa Canato, e para complementar o seu modelo focado em SEO.

    RewriteCond %{HTTP_HOST} !^www\..+$ [NC]
    RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

    Isso vai redirecionar http://google.com para http://www.google.com

    ;)



  10. plastic

    Faltou também o redirecionamento 404

    ErrorDocument 404 /404.html

    ;)



  11. Muito boa a abordagem sobre .htacess. Parabéns!



  12. Ricardo

    Olá, é possível configurar um .htaccess na raiz do site, que impeça a criação de outros .htaccess em sub-diretórios?

    Abraços.



    • André Mazzitelli

      Olá Ricardo! Acredito que não… Talvez alguém que esteja lendo o artigo possa dizer com certeza, mas eu desconheço uma forma de fazer isso. Se você descobrir, por favor, poste aqui a solução. Valeeeu ;)



  13. Estou aprendendo ainda e conseguiu muitos avanços com suas dicas. Muito obrigado por compartilhar seu conhecimento.

    Mas gostaria de saber se poderia me ajudar, estou com esse erro abaixo no meu site, ja tentei de tudo mas ainda não resolvi, poderia me ajudar se possível? meu .htaccess esta igual o que vc recomendou nessa página.

    Aproveitar cache do navegador

    Setting an expiry date or a maximum age in the HTTP headers for static resources instructs the browser to load previously downloaded resources from local disk rather than over the network.
    Learn more
    Suggestions for this page
    Os seguintes recursos armazenáveis em cache têm uma vida útil de atualização curta. Especifique uma expiração de pelo menos uma semana no futuro para os seguintes recursos:

    /css/images/footer.gif (30 minutos)
    /css/images/foto.png (30 minutos)
    /js/jquery.jcarousel.js (30 minutos)

    Att,
    Anderson



    • André Mazzitelli

      Fala Anderson!

      A ferramenta que você usou está acusando que as diretivas de cache no seu .htaccess estão forçando o navegador a renovar o cache dos arquivos listados a cada 30 minutos.

      Caso a configuração do seu .htaccess não esteja com a regra de 30 minutos, verifique com o provedor de hospedagem do site. Alguns provedores forçam algumas diretivas padrão (já tive más experiências com isso).



      • Pois é, como disse, o meu .htaccess ta do jeito que vc explicou. O problema deve ser no servidor mas o onde hospedo meu site o rapaz disse que contratou um serviço sem cache… Não sei o que fazer…



        • André Mazzitelli

          • |

          Se o servidor não aceita cache não tem muito o que fazer…



  14. ricardo

    caro amigo estou usando wordpress com thema da appthem é o seguinte colocando o .httcess so no raiz pega todos css js html e outros arquivos.



    • André Mazzitelli

      Fala Ricardo =)

      Não entendi o seu comentário…



  15. Mauricio

    Gostei bastante do artigo, parabéns! Senti falta de uma explicação sobre o htaccess que não encontro em lugar nenhum, e até mesmo na documentação oficial do apache é complicada de entender, que é a ordem e hierarquia dos itens dentro do htaccess. Por exemplo, você citou o Options -Indexes que está dentro de um ifModule, eu usava o Options -Indexes “solto” no htaccess e funcionava normalmente. Assim como o Gzip aplicado de forma completamente diferente, usando outras formas de fazer funcionar e os sites de verificação de compactação diziam que estava Ok. Acho isso muito complicado e não sei qual item tem que ficar acima de qual. Abraços,



    • André Mazzitelli

      Fala Mauricio =)
      Vamos ver se eu consigo tirar as suas dúvidas:

      1 – Não existe uma ordem ou hierarquia. Você pode colocar as diretivas na ordem que vc quiser =)

      2 – Esse verificações como o “” servem apenas para verificar se esse módulo existe no Apache. Ele só vai executar o “Options -Indexes”, caso o modulo “mod_autoindex.c” esteja presente no servidor. Se você tem certeza que esse módulo está instalado no servidor do seu site, não é necessário realizar a verificação. Você pode colocar apenas “Options -Indexes” e vai funcionar da mesma forma. Mas como o Mochila Binária é um site aberto, várias pessoas vão ler e pode acontecer de alguma delas não possuir esse módulo instalado no servidor, podendo dar algum conflito. Então só para garantir que, caso alguém copie e cole o código desse post, não vai bugar o site de ninguém. =P

      Consegui esclarecer alguma coisa? Ficou mais alguma dúvida?



  16. Obrigado pelo post foi de grande ajuda!



  17. Oi,

    Bloqueie este site pelo .htaccess… coloquei esta mensagem nele e substitui o arquivo… agora tentei voltar o antigo .htaccess que eu tinha de backup mas o site nao voltou ao ar!! como faço???



    • André Mazzitelli

      Olá Ana Carolina!
      Sua pergunta ficou um pouco confusa. Pode explicar melhor, por favor?



  18. Muito bom.
    Já criei um modelo padrão para usar nos nossos trabalhos.

    Parabéns. Obrigado, abraço.



  19. Edivaldo

    Olá.
    O .htaccess do meu site tá configurado exatamente assim, conforme abaixo. Só que na URL do artigo não tem o hifem separando as palavras, já nos anúncios as palavras ficam separadas por hifen.

    #RewriteEngine On
    #RewriteCond %{SCRIPT_FILENAME} !-f
    #RewriteCond %{SCRIPT_FILENAME} !-d
    #RewriteRule ^post\/(.+)$ post.php?cod=$1
    #RewriteRule ^anuncio\/(.+)$ anuncio.php?cod=$1

    RewriteEngine On
    RewriteRule ^(.*)\/(.*)\/post\/?([0-9]*)\/?$ /post.php?cod=$3
    RewriteRule post\/(.*)\/([0-9]*).html\/?$ /post.php?cod=$2
    RewriteRule ^(.*)\/(.*)\/anuncio\/?([0-9]*)\/?$ /anuncio.php?cod=$3
    RewriteRule anuncio\/(.*)\/([0-9]*).html\/?$ /anuncio.php?cod=$2

    Isso tá causando erro de rastreamento do googlebot, porque as palavras da URL estão separadas apenas com um ESPAÇO. teste%20de%20Host/2.html

    ALGUEM PODE ME AJUDAR?



    • André Mazzitelli

      Fala Edivaldo! Não sei se entendi muito bem o seu problema, mas o trecho abaixo transforma esses “caracteres de espaço” em hífen. Veja se te ajuda.

      RewriteEngine On
      RewriteCond %{THE_REQUEST} (\s|%20)
      RewriteRule ^([^\s%20]+)(?:\s|%20)+([^\s%20]+)((?:\s|%20)+.*)$ $1-$2$3 [N,DPI]
      RewriteRule ^([^\s%20]+)(?:\s|%20)+(.*)$ /$1-$2 [L,R=301,DPI]

      Grande abraço!



  20. Valeu pelas dicas!!! Melhorou muito a velocidade do meu blog. Fiz o teste pelo Google Developers (https://developers.google.com/speed/) visando a melhora de desempenho no Adsense. Abraço!



  21. Simplesmente excelente.



  22. Erivaldo Ribeiro

    Valeu André…

    Sensacional!
    Estive procurando por uma solução como esta muito tempo…
    Valeu a espera e os resultados…

    Um grande abraço!



  23. Robert

    Amigo, seu artigo é muito bom e aprendi muito com ele, pois estava a procura de mais conhecimento sobre os comandos do htacess, gostaria de saber duas coisa, casa você possa me ajuda…

    1-O que você indica pra aprofundar sobre o uso dos comandos para uso do htacess?
    2-Não consigo exibir o icone favicon.ico que fica na tag HTML

    Essa tag é chamada via função do php que criei.

    Meu arquivo .htaccess

    #Forçando o charset UTF-8 nos seus arquivos

    AddDefaultCharset UTF-8

    #Utilizando o gzip para fazer a compressão dos arquivos, você economiza banda e deixa o site mais rápido,
    #pois o servidor envia o arquivo comprimido para o navegador, que por sua vez descompacta esses arquivos e exibe para o usuário.

    SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
    RequestHeader append Accept-Encoding “gzip,deflate” env=HAVE_Accept-Encoding

    FilterDeclare COMPRESS
    FilterProvider COMPRESS DEFLATE resp=Content-Type $text/html
    FilterProvider COMPRESS DEFLATE resp=Content-Type $text/css
    FilterProvider COMPRESS DEFLATE resp=Content-Type $text/plain
    FilterProvider COMPRESS DEFLATE resp=Content-Type $text/xml
    FilterProvider COMPRESS DEFLATE resp=Content-Type $text/x-component
    FilterProvider COMPRESS DEFLATE resp=Content-Type $application/javascript
    FilterProvider COMPRESS DEFLATE resp=Content-Type $application/json
    FilterProvider COMPRESS DEFLATE resp=Content-Type $application/xml
    FilterProvider COMPRESS DEFLATE resp=Content-Type $application/xhtml+xml
    FilterProvider COMPRESS DEFLATE resp=Content-Type $application/rss+xml
    FilterProvider COMPRESS DEFLATE resp=Content-Type $application/atom+xml
    FilterProvider COMPRESS DEFLATE resp=Content-Type $application/vnd.ms-fontobject
    FilterProvider COMPRESS DEFLATE resp=Content-Type $image/svg+xml
    FilterProvider COMPRESS DEFLATE resp=Content-Type $image/x-icon
    FilterProvider COMPRESS DEFLATE resp=Content-Type $application/x-font-ttf
    FilterProvider COMPRESS DEFLATE resp=Content-Type $font/opentype
    FilterChain COMPRESS
    FilterProtocol COMPRESS DEFLATE change=yes;byteranges=no

    AddOutputFilterByType DEFLATE text/html text/plain text/css application/json
    AddOutputFilterByType DEFLATE application/javascript
    AddOutputFilterByType DEFLATE text/xml application/xml text/x-component
    AddOutputFilterByType DEFLATE application/xhtml+xml application/rss+xml application/atom+xml
    AddOutputFilterByType DEFLATE image/x-icon image/svg+xml application/vnd.ms-fontobject application/x-font-ttf font/opentype

    #Resumidamente, Entity tags (ETags) são um tipo de mecanismo feito para checar se existe uma nova versão
    #do arquivo em cache. Com esse mecanismo desabilitado, nós impedimos que o cache ou o browser fiquem tentando
    #fazer a validação, portanto ele é forçado a utilizar Cache-Control e Expires header.
    #Para disabilitar o ETag:

    Header unset ETag

    FileETag None

    #Utilizando o gzip para fazer a compressão dos arquivos, você economiza banda e deixa o site mais rápido,
    #pois o servidor envia o arquivo comprimido para o navegador, que por sua vez descompacta esses arquivos
    #e exibe para o usuário.

    ExpiresActive on
    ExpiresDefault “access plus 1 month”
    ExpiresByType text/cache-manifest “access plus 0 seconds”
    # Html
    ExpiresByType text/html “access plus 0 seconds”
    # Data
    ExpiresByType text/xml “access plus 0 seconds”
    ExpiresByType application/xml “access plus 0 seconds”
    ExpiresByType application/json “access plus 0 seconds”
    # Feed
    ExpiresByType application/rss+xml “access plus 1 hour”
    ExpiresByType application/atom+xml “access plus 1 hour”
    # Favicon
    ExpiresByType image/x-icon “access plus 1 week”
    # Media: images, video, audio
    ExpiresByType image/gif “access plus 1 month”
    ExpiresByType image/png “access plus 1 month”
    ExpiresByType image/jpg “access plus 1 month”
    ExpiresByType image/jpeg “access plus 1 month”
    ExpiresByType video/ogg “access plus 1 month”
    ExpiresByType audio/ogg “access plus 1 month”
    ExpiresByType video/mp4 “access plus 1 month”
    ExpiresByType video/webm “access plus 1 month”
    # HTC files
    ExpiresByType text/x-component “access plus 1 month”
    # Webfonts
    ExpiresByType application/x-font-ttf “access plus 1 month”
    ExpiresByType font/opentype “access plus 1 month”
    ExpiresByType application/x-font-woff “access plus 1 month”
    ExpiresByType image/svg+xml “access plus 1 month”
    ExpiresByType application/vnd.ms-fontobject “access plus 1 month”
    # CSS / JS
    ExpiresByType text/css “access plus 1 year”
    ExpiresByType application/javascript “access plus 1 year”

    #Essas diretivas irão melhorar o desempenho no nosso querido Internet Explorer, forçando-o a sempre carregar
    #utilizando a última versão disponível (ou utilizar o chrome frame, caso esteja instalado)

    Header set X-UA-Compatible “IE=Edge,chrome=1″

    Header unset X-UA-Compatible

    #Eliminar a “assinatura” do servidor que é exibida nas páginas de erro
    ServerSignature Off

    RewriteEngine On
    #######################################################################
    #
    # Configurações Gerais PHP_INI_PER_DIR
    #
    # -> Desligando opções depreciadas.
    # -> Ligando short_open_tag para poder permitir <?= nas templates.
    # A partir do PHP 5.4+ as expressões Restringindo uso de cookies a envios HTTP, indicando ao browser
    # que não tente abrir esses cookies se algum Javascript solicitar.
    # Isso previne certos tipos de ataques XSS.
    # Leia mais: http://php.net/function.setcookie.php#79488
    #
    ########################################################################

    php_flag magic_quotes_gpc Off
    php_flag magic_quotes_runtime Off
    php_flag magic_quotes_sybase Off
    php_flag register_globals Off
    php_flag short_open_tag On
    php_flag session.cookie_httponly On

    RewriteBase /01-ScriptsProntos/ModeloLogica-TESTE/

    #Não exibindo erros ao usuário
    php_flag display_startup_errors off
    php_flag display_errors off
    php_flag html_errors off

    #Logando os erros
    php_flag log_errors on
    php_value error_log Privado/Log/php_error.log

    DirectoryIndex index.php 404.html 403.html
    RewriteCond %{SCRIPT_FILENAME} !-f
    RewriteCond %{SCRIPT_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !\.(js|html|php|gif|jpg|png|css|ico|jpeg)$
    RewriteRule ^(.*)$ index.php?link=$1



    • André Mazzitelli

      1 – Eu sempre acho que o melhor lugar para aprender alguma coisa é na documentação oficial. Nesse caso, a documentação do Apache: http://httpd.apache.org/docs/2.2/howto/htaccess.html
      2 – Cara, eu acho melhor vc deixar o favicon.ico na raiz do seu site. Na maioria das vezes o favicon é adicionado automaticamente quando está na raiz. Além disso, geralmente o favicon fica em cache nos browsers. Pode demorar um pouco até atualizar.



  24. Robert

    acho que não foi permitida a tag que enviei no post acima, mas o HTML e assim

    link rel=”shortcut icon” href=”http://127.0.0.1/01-ScriptsProntos/ModeloLogica-TESTE/Publico/ico/favicon.ico”

    So retirei os sinais de menor e maior .



  25. otimo post



  26. Renato Moreira

    Olá André,

    Estava lendo seu artigo e verifiquei que o código de compressão que você apresenta é diferente do que eu estou usando hoje:

    #utilizando o mod_gzip

    mod_gzip_on Yes

    mod_gzip_dechunk Yes

    mod_gzip_item_include file .(html?|txt|css|js|php|pl)$

    mod_gzip_item_include handler ^cgi-script$

    mod_gzip_item_include mime ^text/.*

    mod_gzip_item_include mime ^application/x-javascript.*

    mod_gzip_item_exclude mime ^image/.*

    mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*

    Saberia me explicar qual a diferença ?
    A e parabéns pelo artigo.



  27. Olá André Mazzitelli!

    É muito importante para os iniciantes na construção de bons blogs contar com a oportunidade de encontrar o seu site. Você proporcionou de forma clara a solução para o meu problema. O conteúdo está excelente.

    Parabéns!

    Paz e bençãos!

    Dinilson Marçal



  28. Victor Freitas

    Olá, tive um problema com o código

    FilterDeclare COMPRESS
    FilterProvider COMPRESS DEFLATE resp=Content-Type $text/html
    FilterProvider COMPRESS DEFLATE resp=Content-Type $text/css
    FilterProvider COMPRESS DEFLATE resp=Content-Type $text/plain
    FilterProvider COMPRESS DEFLATE resp=Content-Type $text/xml
    FilterProvider COMPRESS DEFLATE resp=Content-Type $text/x-component
    FilterProvider COMPRESS DEFLATE resp=Content-Type $application/javascript
    FilterProvider COMPRESS DEFLATE resp=Content-Type $application/json
    FilterProvider COMPRESS DEFLATE resp=Content-Type $application/xml
    FilterProvider COMPRESS DEFLATE resp=Content-Type $application/xhtml+xml
    FilterProvider COMPRESS DEFLATE resp=Content-Type $application/rss+xml
    FilterProvider COMPRESS DEFLATE resp=Content-Type $application/atom+xml
    FilterProvider COMPRESS DEFLATE resp=Content-Type $application/vnd.ms-fontobject
    FilterProvider COMPRESS DEFLATE resp=Content-Type $image/svg+xml
    FilterProvider COMPRESS DEFLATE resp=Content-Type $image/x-icon
    FilterProvider COMPRESS DEFLATE resp=Content-Type $application/x-font-ttf
    FilterProvider COMPRESS DEFLATE resp=Content-Type $font/opentype
    FilterChain COMPRESS
    FilterProtocol COMPRESS DEFLATE change=yes;byteranges=no

    todas as tags que contem esse código COMPRESS está dando erro 500 no htaccess, tem como fazer alguma alteração para corrigir e poder usar esse código?



  29. VDalpra

    tive o mesmo problema, está dando erro 500. com o código abaixo,

    FilterDeclare COMPRESS
    FilterProvider COMPRESS DEFLATE resp=Content-Type $text/html
    FilterProvider COMPRESS DEFLATE resp=Content-Type $text/css
    FilterProvider COMPRESS DEFLATE resp=Content-Type $text/plain
    FilterProvider COMPRESS DEFLATE resp=Content-Type $text/xml
    FilterProvider COMPRESS DEFLATE resp=Content-Type $text/x-component
    FilterProvider COMPRESS DEFLATE resp=Content-Type $application/javascript
    FilterProvider COMPRESS DEFLATE resp=Content-Type $application/json
    FilterProvider COMPRESS DEFLATE resp=Content-Type $application/xml
    FilterProvider COMPRESS DEFLATE resp=Content-Type $application/xhtml+xml
    FilterProvider COMPRESS DEFLATE resp=Content-Type $application/rss+xml
    FilterProvider COMPRESS DEFLATE resp=Content-Type $application/atom+xml
    FilterProvider COMPRESS DEFLATE resp=Content-Type $application/vnd.ms-fontobject
    FilterProvider COMPRESS DEFLATE resp=Content-Type $image/svg+xml
    FilterProvider COMPRESS DEFLATE resp=Content-Type $image/x-icon
    FilterProvider COMPRESS DEFLATE resp=Content-Type $application/x-font-ttf
    FilterProvider COMPRESS DEFLATE resp=Content-Type $font/opentype
    FilterChain COMPRESS
    FilterProtocol COMPRESS DEFLATE change=yes;byteranges=no

    funcionaou com as seguintes alterações, mas não consegui fazer carregar os arquivos .css.js e outros.

    FilterDeclare COMPRESS
    FilterProvider COMPRESS DEFLATE “%{CONTENT_TYPE} = ‘text/html’”
    FilterProvider COMPRESS DEFLATE “%{CONTENT_TYPE} = ‘text/css’”
    FilterProvider COMPRESS DEFLATE “%{CONTENT_TYPE} = ‘text/plain’”
    FilterProvider COMPRESS DEFLATE “%{CONTENT_TYPE} = ‘text/xml’”
    FilterProvider COMPRESS DEFLATE “%{CONTENT_TYPE} = ‘text/x-component’”
    FilterProvider COMPRESS DEFLATE “%{CONTENT_TYPE} = ‘application/javascript’”
    FilterProvider COMPRESS DEFLATE “%{CONTENT_TYPE} = ‘application/json’”
    FilterProvider COMPRESS DEFLATE “%{CONTENT_TYPE} = ‘application/xml’”
    FilterProvider COMPRESS DEFLATE “%{CONTENT_TYPE} = ‘application/xhtml+xml’”
    FilterProvider COMPRESS DEFLATE “%{CONTENT_TYPE} = ‘application/rss+xml’”
    FilterProvider COMPRESS DEFLATE “%{CONTENT_TYPE} = ‘application/atom+xml’”
    FilterProvider COMPRESS DEFLATE “%{CONTENT_TYPE} = ‘application/vnd.ms-fontobject’”
    FilterProvider COMPRESS DEFLATE “%{CONTENT_TYPE} = ‘image/svg+xml’”
    FilterProvider COMPRESS DEFLATE “%{CONTENT_TYPE} = ‘image/x-icon’”
    FilterProvider COMPRESS DEFLATE “%{CONTENT_TYPE} = ‘application/x-font-ttf’”
    FilterProvider COMPRESS DEFLATE “%{CONTENT_TYPE} = ‘font/opentype’”
    FilterChain COMPRESS
    FilterProtocol COMPRESS DEFLATE change=yes;byteranges=no



  30. Pingback: Comprenssão de dados: gzip, zlib e deflate | Blog da ValueHost

  31. Pingback: Compressão de dados: gzip, zlib e deflate | Blog da ValueHost

  32. Excelente materia, procurei muitas por ai.. nada igual a esse conteúdo. Ja apliquei no meu site e teve melhora absurda.
    Parabéns !

    Mauro Carvalho
    http://www.venderprodutos.com



  33. Tem como isso funcionar na lataforma windows ?



    • André Mazzitelli

      O .htaccess funciona apenas em servidores Apache. Se você estiver usando o IIS (da Microsoft), esse tipo de configuração é feita através de um XML chamado web.config.



  34. TEM COMO FUNCIONAR NA PLATAFORMA WINDOWS ???



  35. guilherme

    ola estou com erro 500 apos o site logar oque pode ser ?



  36. foi a melhor explicaçao que vi na net, vc esta de parabens!!!



  37. Excelente artigo!
    Aumentou a performance do meu site em +30%



  38. Obrigado, vai ajudar muito mesmo. :)



  39. Marcelo

    Muito bom………..deixou meu site bem mais rapido

    obrig.



  40. Dias a procurar e enfim encontrei, muito obrigada realmente fez a diferença!



Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>


Voltar

Fatal error: Call to undefined function act_stream() in /nfs/c09/h04/mnt/128096/domains/mochilabinaria.com.br/html/wp-content/themes/mochilabinaria/footer.php on line 54