Olá pessoal,
Bom dia!

Neste post, vou compartilhar informações de grande utilidade relacionado ao arquivo .htaccess, que é o arquivo de configuração do servidor HTTP Apache, no qual já fiz alguns posts sobre neste link. Essas dicas que achei no blog http://www.deuzebranaweb.com.br/ e achei o conteúdo excelente e resolvi compartilhar com vocês essas pequenas dicas preciosas.

Para criar as regras abaixo, abra o bloco de notas ou similar, salve como “todos os arquivos” e com o nome .htaccess. Vale ressaltar que alguns códigos só funcionarão se determinadas extensões estiverem habilitadas no apache. Caso algum código gere um erro 500, habilite no apache o módulo correspondente a ele. E para evitar tais erros, faça os códigos em estruturas condicionais (<IfModule>), assim o código só será executado caso o módulo esteja ativo.

Ocultando o index da URL

# se o seu site é feito em php, substitua os "html" pelo mesmo
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+/)*index\.html\ HTTP/
RewriteRule ^(([^/]+/)*)index\.html$ http://www.seusite.com.br/$1 [R=301,L]

Protegendo o seu site contra cópia ou uso indevido de arquivos (como scripts php, js, css, imagens)

#Neste caso, se alguém que não está na lista acima tentar usar as suas imagens direto do seu site ou usar os seus scripts, mostrará uma tela com erro e as imagens não serão mostradas.
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://seusite.com.br/.*$ [NC]  #este site está liberado a usar (o seu site no caso)
RewriteCond %{HTTP_REFERER} !^http://www.seusite.com.br/.*$ [NC]  #este site está liberado a usar
RewriteCond %{HTTP_REFERER} !^http://www.google.com.br/.*$ [NC]  #liberar o google para usar as suas imagens
RewriteRule .*\.(jpg|jpeg|gif|png|bmp|php|js|swf)$ – [F,NC]

Bloquear o arquivo .htaccess contra acesso pela URL

<Files ~ "^\.(htaccess|htpasswd)$">
  deny from all
</Files>

Bloqueando arquivos específicos contra acesso pela URL

<files seuarquivo.php>
  order allow,deny
  deny from all
</files>

Definir a ordem padrão de carregamento dos arquivos

Por padrão, o arquivo a ser carregado quando você digita o URL do site e abre uma página web, é o index.html. Entetanto, isso pode ser facilmente alterado conforme a sua necessidade, alterando o arquivo .htaccess do servidor.

Utilizando o código abaixo, definimos que a página padrão será index.php. Caso esse arquivo não exista, será carregado o arquivo seguinte da lista (index.htm) e assim sucessivamente, até chegar no último arquivo da lista (pagina.php). Caso esse último arquivo não exista, o apache irá reproduzir um erro no navegador do visitante do seu site (Erro 403 – Forbidden).

## Pagina padrao ##
DirectoryIndex index.php index.htm index.html pagina.php

Aumentar o tempo de sessão do PHP

<IfModule mod_php5.c>

    # Definir o tempo máximo de execucao do script para 30 mins (padrão: 60s)
    php_value max_execution_time 1800

    # Definir o tempo de expiração de sessao para 2 horas (padrão: 24 mins)
    php_value session.cookie_lifetime 7200
    php_value session.cache_expire 7200
    php_value session.gc_maxlifetime 7200

</IfModule>

Sempre colocar “www” na URL

<IfModule mod_rewrite.c>
 
    RewriteEngine On
        
    # Redirecionar http://dominio.com.br para http://www.dominio.com.br
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,NE,L]
 
    # Retirar / no final do link
    RewriteCond %{HTTP_HOST} !^\. [NC]
    RewriteRule ^(.+[^/])/$ http://%{HTTP_HOST}/$1 [R=301,L]
 
    # Remover o index.php
    RewriteCond %{THE_REQUEST} ^.*/index.php
    RewriteRule ^(.*)$ / [R=301,L]
    
</IfModule>

Comprimir arquivos do site para consumir menos banda

<IfModule mod_deflate.c>
  <FilesMatch "\.(js|css|jpg|png|gif|ico|php|html|htm)$">
    <ifModule mod_filter.c>
      SetOutputFilter DEFLATE
      AddOutputFilterByType DEFLATE text/css text/javascript application/x-javascript text/html text/plain text/xml image/x-icon
    </IfModule>
  </FilesMatch>
</IfModule>

Ativando compressão com o DEFLATE

Esta é a compressão mais fácil de configurar no servidor e já vem habilitada por padrão. Utiliza menos processamento do servidor que o GZip, mas não compacta tanto como o mesmo.

<IfModule mod_deflate.c>

    # Compactar por tipo - html, text, css, xml
    AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml

    # Compactar por tipo - javascript
    AddOutputFilterByType DEFLATE application/x-javascript application/javascript text/javascript text/x-js text/x-javascript

    # Compactar por extensão
    AddOutputFilter DEFLATE js css htm html xml ttf eot

</IfModule>

Ativando compressão com o GZip

O GZip vem ganhando muito espaço hoje em dia na Web devido ao seu grande poder de compressão de dados, diminuindo o tempo de carregamento das páginas drasticamente, principalmente quando falamos de internet móvel (3G) no Brasil, que ainda é muito lenta e precária em vários lugares. Por apresentar um alto nível de compressão, exige mais processamento que o método de compressão DEFLATE.

<IfModule mod_gzip.c>
    mod_gzip_on       Yes
    mod_gzip_dechunk  Yes
    mod_gzip_item_include file      \.(html?|txt|css|js|php|pl|ttf|eot)$
    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.*
</IfModule>

Criando páginas de erros personalizadas

ErrorDocument 400 /sua-pagina-erro-400
ErrorDocument 404 /página-de-erro-404
ErrorDocument 500 /página-para-erro-500

Alterar a página inicial (padrão) do site

DirectoryIndex minhaoutrapagina.html
Redirecionamento 301 com htaccess
Redirect 301 /página-a-ser-movida  http://www.seusite.com.br/pagina-movida-para-ca

Bloquear listagem de diretórios

# Impedir a listagem de arquivos no endereço www.seudominio.com/images/
IndexIgnore /images/*

# Impedir a listagem do próprio .htaccess e várias outras extensões de arquivos, além do arquivo teste.xls
IndexIgnore .htaccess *.php *.js *.css *.htm *.html *.log *.sql *.pdf *.swf *.rtf *.doc *.odt teste.xls

# Impedir a listagem de qualquer arquivo e diretório
Options -Indexes

Forçar o uso de SSL

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://seu-site.com.br/$1 [R,L]

Desabilitar case sensitive

CheckSpelling On
#agora a url PAGINA.HTML é igualmente acessada por pagina.html

Restringindo o acesso por IP

Order allow,deny
allow from 192.168.0.
deny from all
# Deixa a somente a INTRANET acessar
Order deny,allow
deny from 192.168.0.25
allow from all
# Deixa todo mundo acessar, menos o IP 192.168.0.25
Order deny, allow
deny from all
#bloquear geral

Redirecionar acesso de um site para outro lugar

RewriteEngine on
RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?bloqueado.com.br.*$ [NC]
RewriteRule .* http://www.antispam.br [R,L]
#Se o site "bloqueado" mandar algum visitante para aqui, é redirecionado para o "antispam"

Expressões regulares

#todos os arquivos de uma página serão redirecionados para outra
RewriteEngine on
RewriteRule ^pagina-antiga/(.*) http://www.novosite.com.br/pagina-antiga/$1
#redirecionar somente os arquivos terminados em php
RewriteEngine om
RewriteRule ^pagina-antiga/(.*)\.php http://www.novosite.com.br/pagina-antiga/$1.php
#redirecionar tudo de um site para outro
RedirectMatch permanent /(.*) http://www.novosite.com/$1

Retirar extensões da URL

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html
#neste caso, estou retirando apenas o HTML

Forçar o uso do Charset UTF-8 para arquivos

<FilesMatch "\.(htm|html|css|js)$">
  AddDefaultCharset UTF-8
</FilesMatch>

Cache de navegador – Definir tempo de expiração (segundos)

<ifModule mod_expires.c>
  ExpiresActive On
  ExpiresDefault A0
  ExpiresByType image/gif A604800  
  ExpiresByType image/jpeg A604800
  ExpiresByType image/png A604800
  ExpiresByType text/css A604800
  ExpiresByType text/javascript A604800
  ExpiresByType application/x-javascript A604800
</ifModule>

Cache de navegador – Definir controle de cache (segundos)

<IfModule mod_headers.c>
 <FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf|xml|woff)$">
 Header set Cache-Control "max-age=604800, public"
 Header append Vary User-Agent env=!dont-vary
 Header append Vary Accept-Encoding
 Header unset Pragma
 </FilesMatch>
</IfModule>

Cache de navegador – Forçar o uso do cache, desabilitando o ETag

<IfModule mod_headers.c>
 Header unset Etag
 Header unset Last-Modified 
</IfModule>

Adicionar novos mimetypes

AddType application/x-endnote-connection enz AddType application/x-endnote-filter enf AddType application/x-spss-savefile sav 

Desabilitar execução de certos Scripts

Options -ExecCGI
AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi

Alterar a linguagem Padrão

DefaultLanguage en-US

Alterar fuso horário padrão

SetEnv TZ America/Indianapolis

Forçar download de certos arquivos

AddType application/octet-stream .avi .mpg .mov .pdf .xls .mp4

Bloquear requisição baseado no user-agent

SetEnvIfNoCase ^User-Agent$ .*(craftbot|download|extract|stripper|sucker|ninja|clshttp|webspider|leacher|collector|grabber|webpictures) HTTP_SAFE_BADBOT
SetEnvIfNoCase ^User-Agent$ .*(libwww-perl|aesop_com_spiderman) HTTP_SAFE_BADBOT
Deny from env=HTTP_SAFE_BADBOT

É isso aí, pessoal!
Espero que tenham gostado desse post e até o próximo.