.htaccess é um arquivo de texto simples que permite controlar como o seu servidor web lida com solicitações. Embora tenha sido originalmente projetado para gerenciar o acesso a diretórios, agora atende a muitas outras finalidades.
Este guia não é um mergulho profundo em .htaccess mas sim uma introdução prática com uma coleção de trechos de código úteis. Enquanto .htaccess é poderoso, mas isso não significa que você deva usá-lo para tudo. Entender quando e como aplicá-lo pode melhorar a segurança, o desempenho e a funcionalidade do seu site.
O que é .htaccess?
As .htaccess arquivo, abreviação de “acesso a hipertexto”, é um arquivo de configuração usado principalmente em Apache servidores. Permite aos usuários controlar permissões de acesso, proteger diretórios com senha, configurar redirecionamentos, personalizar páginas de erro e bloquear endereços IP específicos.
Emparelhado com um arquivo .htpasswd, permite controle granular de acesso a diretórios para múltiplos usuários. Muitos provedores de hospedagem oferecem suporte .htaccess, mas não é universal — alguns servidores web, como o Nginx, usam métodos diferentes.
Onde encontrar o seu .htaccess Arquivo?
Por padrão, o .htaccess O arquivo está oculto no Gerenciador de Arquivos do cPanel e em outros painéis de controle de hospedagem. Você pode revelá-lo ativando a opção "Mostrar Arquivos Ocultos" nas configurações do seu gerenciador de arquivos.
Se você não conseguir encontrar o arquivo, não entre em pânico – ele pode não existir ainda. Na maioria dos casos, ele deve estar no diretório raiz do seu site, normalmente chamado public_html ou www. Se você gerencia vários sites na mesma conta de hospedagem, cada site pode ter seu próprio diretório. .htaccess arquivo dentro de sua respectiva pasta.
A maioria dos arquivos de sistema que começam com um ponto (.) estão ocultos. Se o seu .htaccess o arquivo não estiver visível, verifique suas configurações de hospedagem ou crie um manualmente em um editor de texto.
.htaccess Folha de dicas e exemplos de código
Embora o .htaccess pode fazer muita coisa, conhecer os comandos certos é fundamental. Para facilitar as coisas, compilamos uma folha de dicas com os comandos mais usados .htaccess regras. Se você precisa bloquear bots ruins, forçar HTTPS, personalizar páginas de erro ou melhorar SEO, você encontrará abaixo trechos de código prontos para uso.
Basta copiar, colar e ajustar para atender às suas necessidades. Vamos lá!
Observação: Por favor, verifique e confirme todas as regras antes de usá-las. Não nos responsabilizamos por quaisquer problemas que possam surgir – use-as por sua conta e risco. Além disso, a maioria das regras exige que RewriteEngine On diretiva em seu .htaccess arquivo para funcionar corretamente.
Regras de reescrita e redirecionamento
Atenda a todas as solicitações com um PHP Arquivo com .htaccess
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^?]*)$ /index.php [NC,L,QSA]
WordPress .htaccess para permalinks com .htaccess
(Esta é a única regra nesta seção que inclui a regra RewriteEngine on.)
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Forçar www com .htaccess
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301,NC]
Forçar www de forma genérica com .htaccess
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Forçar não-www com .htaccess
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]
Forçar não-www de forma genérica com .htaccess
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.
RewriteCond %{HTTPS}s ^on(s)|off
RewriteCond http%1://%{HTTP_HOST} ^(https?://)(www\.)?(.+)$
RewriteRule ^ %1%3%{REQUEST_URI} [R=301,L]
força HTTPS com as .htaccess
Use isto para redirecionar não HTTPS pedidos para um HTTPS solicitação. Ou seja, se você acessar https://example.com/, ele redirecionará para https://example.com.
RewriteEngine on
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
força HTTPS Atrás de um Proxy com .htaccess
Útil se você tiver um proxy na frente do seu servidor executando a terminação TLS.
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Forçar barra final com .htaccess
Use o seguinte .htaccess Regra para redirecionar quaisquer URLs para a mesma URL (mas com uma barra final) para quaisquer solicitações que não terminem com uma barra final. Por exemplo, redirecionar de https://example.com/sua-página para https://example.com/sua-página/
RewriteCond %{REQUEST_URI} /+[^\.]+$
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]
Remover barra final com .htaccess
Use isto para remover qualquer barra final (ele redirecionará 301 para a URL sem barra final)
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [R=301,L]
Redirecionar uma única página com .htaccess
Redirecionar uma única URL para um novo local
Redirect 301 /oldpage.html https://www.yoursite.com/newpage.html
Redirect 301 /oldpage2.html https://www.yoursite.com/folder/
Alias um único diretório com .htaccess
RewriteEngine On
RewriteRule ^source-directory/(.*) target-directory/$1
Caminhos de alias para script com .htaccess
RewriteEngine On
RewriteRule ^$ index.fcgi/ [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.fcgi/$1 [QSA,L]
Este exemplo tem um index.fcgi arquivo em algum diretório, e quaisquer solicitações dentro desse diretório que não consigam resolver um nome de arquivo/diretório serão enviadas para o index.fcgi roteiro. É bom se você quiser baz.foo/some/cool/path a ser tratado por baz.foo/index.fcgi (que também suporta solicitações de baz.foo) mantendo baz.foo/css/style.css e similar.
Redirecionar um site inteiro com .htaccess
Use o seguinte .htaccess regra para redirecionar um site inteiro para um novo local/domínio
Redirect 301 / https://newsite.com/
Desta forma, faz isso com os links intactos. Isto é www.oldsite.com/some/crazy/link.html se tornará www.newsite.com/some/crazy/link.html. Isso é extremamente útil quando você está apenas “movendo” um site para um novo domínio.
URLs “limpas” com alias .htaccess
Este snippet permite que você use “URLs limpos” — aqueles sem um PHP extensão, por exemplo example.com/users em vez de example.com/users.php.
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^([^.]+)$ $1.php [NC,L]
Regras de segurança
Negar todo o acesso com .htaccess
Se você quiser impedir que o Apache sirva qualquer arquivo, use o seguinte.
Isso impedirá que você acesse seu site. Se quiser negar todo o acesso, mas ainda conseguir visualizá-lo, leia a próxima regra:
Deny from all
Negar todo o acesso, exceto o seu (permitir apenas determinados IPs) com .htaccess
Use isso para permitir que apenas determinados endereços IP acessem seu site.
# Require all denied
# Require ip xxx.xxx.xxx.xxx
xxx.xxx.xxx.xxx é o seu IP. Se você substituir os três últimos dígitos por 0/12, por exemplo, isso especificará um intervalo de IPs dentro da mesma rede, evitando o trabalho de listar todos os IPs permitidos separadamente.
Por favor, veja a próxima regra para o "oposto" desta regra!
Bloquear endereço IP com .htaccess
Isso permitirá acesso a todos os IPs, exceto os listados. Você pode usar isso para permitir acesso a todos, exceto aos endereços IP do spammer.
Substitua xxx.xxx.xxx.xxx e xxx.xxx.xxx.xxy pelos endereços IP que você deseja bloquear.
Apache 2.4
# Require all granted
# Require not ip xxx.xxx.xxx.xxx
# Require not ip xxx.xxx.xxx.xxy
Permitir acesso somente da LAN com .htaccess
order deny,allow
deny from all
allow from 192.168.0.0/24
Negar acesso a determinados agentes de usuário (bots) com .htaccess
Utilize este .htaccess regra para bloquear/banir certos agentes de usuário
RewriteCond %{HTTP_USER_AGENT} ^User\ Agent\ 1 [OR]
RewriteCond %{HTTP_USER_AGENT} ^Another\ Bot\ You\ Want\ To\ Block [OR]
RewriteCond %{HTTP_USER_AGENT} ^Another\ UA
RewriteRule ^.* - [F,L]
Negar acesso a arquivos e diretórios ocultos com .htaccess
Arquivos e diretórios ocultos (aqueles cujos nomes começam com um ponto .) devem ser protegidos na maior parte do tempo, se não em todo o tempo. Por exemplo: .htaccess, .htpasswd, .git, .hg.
RewriteCond %{SCRIPT_FILENAME} -d [OR]
RewriteCond %{SCRIPT_FILENAME} -f
RewriteRule "(^|/)\." - [F]
Alternativamente, você pode simplesmente levantar uma Not Found erro, não dando nenhuma pista ao atacante:
RedirectMatch 404 /\..*$
Negar acesso a determinados arquivos com .htaccess
Use isto para bloquear ou negar acesso a determinados arquivos
<files your-file-name.txt>
order allow,deny
deny from all
</files>
Negar acesso a arquivos de backup e de origem com .htaccess
Esses arquivos podem ser deixados por alguns editores de texto/html (como Vi/Vim) e representam um grande perigo à segurança, quando qualquer pessoa pode acessá-los.
<FilesMatch "(\.(bak|config|dist|fla|inc|ini|log|psd|sh|sql|swp)|~)$">
## Apache 2.2
Order allow,deny
Deny from all
Satisfy All
## Apache 2.4
# Require all denied
</FilesMatch>
Desabilitar navegação em diretórios com .htaccess
Options All -Indexes
Habilitar listagens de diretórios com .htaccess
Options All +Indexes
Desabilitar listagem de certos tipos de arquivo com .htaccess
Use isto para excluir certos tipos de arquivo de serem listados em Apache listagem de diretórios. Você pode usar isso para impedir que arquivos .pdf ou de vídeo sejam exibidos.
IndexIgnore *.zip *.mp4 *.pdf
Desabilitar o Hotlinking de Imagem com .htaccess
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourdomain.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]
Redirecione os hotlinkers e mostre uma imagem diferente com .htaccess
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https://(www\.)?your-website.com/.*$ [NC]
RewriteRule \.(gif|jpg|png)$ https://www.your-website.com/do-not-hotlink-our-content.jpg [R,L]
Negar acesso de certos referenciadores com .htaccess
Use esta regra para bloquear o acesso a solicitações que incluem um referenciador de um determinado domínio.
RewriteCond %{HTTP_REFERER} block-this-referer\.com [NC,OR]
RewriteCond %{HTTP_REFERER} and-block-traffic-that-this-site-sends\.com [NC]
RewriteRule .* - [F]
Proteja um diretório com senha .htaccess
Primeiro, você precisa criar um arquivo .htpasswd em algum lugar do sistema. Execute o seguinte comando na linha de comando:
htpasswd -c /home/hidden/directory/here/.htpasswd the_username
Então você pode usá-lo para autenticação. Em seu .htaccess Para criar um arquivo .htpasswd, você precisa de algo como o código a seguir, mas certifique-se de que AuthUserFile seja o caminho para o arquivo .htpasswd que você acabou de criar. Mantenha o arquivo .htpasswd em um diretório não acessível pela web. Portanto, não o coloque em seus diretórios /public_html/ ou /www/.
AuthType Basic
AuthName "Password Protected Dir Title"
AuthUserFile /home/hidden/directory/here/.htpasswd
Require valid-user
Proteja um arquivo ou vários arquivos com senha .htaccess
AuthName "Password Protected Directory Title"
AuthType Basic
AuthUserFile /home/hidden/directory/here/.htpasswd
<Files "/a-private-file.txt">
Require valid-user
</Files>
<FilesMatch ^((one|two|three)-rings?\.o)$>
Require valid-user
</FilesMatch>
Regras de Desempenho
Compactar arquivos de texto com .htaccess
<IfModule mod_deflate.c>
# Force compression for mangled headers.
# https://developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping
<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>
# Compress all output labeled with one of the following MIME-types
# (for Apache versions below 2.3.7, you don't need to enable `mod_filter`
# and can remove the `<IfModule mod_filter.c>` and `</IfModule>` lines
# as `AddOutputFilterByType` is still in the core directives).
<IfModule mod_filter.c>
AddOutputFilterByType DEFLATE application/atom+xml \
application/javascript \
application/json \
application/rss+xml \
application/vnd.ms-fontobject \
application/x-font-ttf \
application/x-web-app-manifest+json \
application/xhtml+xml \
application/xml \
font/opentype \
image/svg+xml \
image/x-icon \
text/css \
text/html \
text/plain \
text/x-component \
text/xml
</IfModule>
</IfModule>
Definir cabeçalhos de expiração com .htaccess
Expira cabeçalhos Informa ao navegador se ele deve solicitar um arquivo específico do servidor ou apenas baixá-lo do cache. É recomendável definir os cabeçalhos de expiração do conteúdo estático para um futuro distante.
Se você não controla o controle de versão com eliminação de cache baseada em nome de arquivo, considere reduzir o tempo de cache para recursos como CSS e JS para algo como 1 semana.
<IfModule mod_expires.c>
ExpiresActive on
ExpiresDefault "access plus 1 month"
# CSS
ExpiresByType text/css "access plus 1 year"
# Data interchange
ExpiresByType application/json "access plus 0 seconds"
ExpiresByType application/xml "access plus 0 seconds"
ExpiresByType text/xml "access plus 0 seconds"
# Favicon (cannot be renamed!)
ExpiresByType image/x-icon "access plus 1 week"
# HTML components (HTCs)
ExpiresByType text/x-component "access plus 1 month"
# HTML
ExpiresByType text/html "access plus 0 seconds"
# JavaScript
ExpiresByType application/javascript "access plus 1 year"
# Manifest files
ExpiresByType application/x-web-app-manifest+json "access plus 0 seconds"
ExpiresByType text/cache-manifest "access plus 0 seconds"
# Media
ExpiresByType audio/ogg "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType video/mp4 "access plus 1 month"
ExpiresByType video/ogg "access plus 1 month"
ExpiresByType video/webm "access plus 1 month"
# Web feeds
ExpiresByType application/atom+xml "access plus 1 hour"
ExpiresByType application/rss+xml "access plus 1 hour"
# Web fonts
ExpiresByType application/font-woff2 "access plus 1 month"
ExpiresByType application/font-woff "access plus 1 month"
ExpiresByType application/vnd.ms-fontobject "access plus 1 month"
ExpiresByType application/x-font-ttf "access plus 1 month"
ExpiresByType font/opentype "access plus 1 month"
ExpiresByType image/svg+xml "access plus 1 month"
</IfModule>
Desligue eTags com .htaccess
Ao remover o cabeçalho ETag, você desabilita os caches e os navegadores de validar arquivos, forçando-os a depender dos seus cabeçalhos Cache-Control e Expires.
<IfModule mod_headers.c>
Header unset ETag
</IfModule>
FileETag None
Limitar o tamanho do arquivo de upload com .htaccess
Coloque o tamanho do arquivo em bytes. O código abaixo o limita a 1 MB.
LimitRequestBody 1048576
Regras diversas
Variáveis de servidor para mod_rewrite com .htaccess
%{API_VERSION}
%{DOCUMENT_ROOT}
%{HTTP_ACCEPT}
%{HTTP_COOKIE}
%{HTTP_FORWARDED}
%{HTTP_HOST}
%{HTTP_PROXY_CONNECTION}
%{HTTP_REFERER}
%{HTTP_USER_AGENT}
%{HTTPS}
%{IS_SUBREQ}
%{REQUEST_FILENAME}
%{REQUEST_URI}
%{SERVER_ADDR}
%{SERVER_ADMIN}
%{SERVER_NAME}
%{SERVER_PORT}
%{SERVER_PROTOCOL}
%{SERVER_SOFTWARE}
%{THE_REQUEST}
Conjunto PHP Variáveis com .htaccess
php_value <key> <val>
Por exemplo:
php_value upload_max_filesize 50M
php_value max_execution_time 240
Páginas de erro personalizadas com .htaccess
ErrorDocument 500 "Houston, we have a problem."
ErrorDocument 401 https://error.yourdomain.com/mordor.html
ErrorDocument 404 /errors/halflife3.html
Redirecione os usuários para uma página de manutenção enquanto você atualiza com .htaccess
Isso redirecionará os usuários para uma página de manutenção, mas permitirá o acesso ao seu endereço IP. Altere 555.555.555.555 para o seu IP e YourMaintenancePageFilenameOrFullUrlUrl.html para a sua página de erro (ou um URL inteiro, em um domínio diferente).
ErrorDocument 403 YourMaintenancePageFilenameOrFullUrlUrl.html
Order deny,allow
Deny from all
Allow from 555.555.555.555
Forçar download com .htaccess
Às vezes, você quer forçar o navegador a baixar algum conteúdo em vez de exibi-lo. O trecho a seguir ajudará.
<Files *.md>
ForceType application/octet-stream
Header set Content-Disposition attachment
</Files>
Desabilitar a exibição de informações do servidor (assinatura do servidor) com .htaccess
Embora muitas pessoas considerem isso inútil (especialmente em relação à segurança), se você quiser impedir que seu servidor divulgue informações do servidor (o sistema operacional do servidor etc.), use isto:
ServerSignature Off
Impedir download com .htaccess
Às vezes, você quer forçar o navegador a exibir determinado conteúdo em vez de baixá-lo. O trecho a seguir ajudará.
<FilesMatch "\.(tex|log|aux)$">
Header set Content-Type text/plain
</FilesMatch>
Permitir fontes entre domínios com .htaccess
CDNAs webfonts servidas podem não funcionar no Firefox ou IE devido ao CROS. O seguinte trecho do alrra deve resolver isso.
<IfModule mod_headers.c>
<FilesMatch "\.(eot|otf|ttc|ttf|woff|woff2)$">
Header set Access-Control-Allow-Origin "*"
</FilesMatch>
</IfModule>
Codificação UTF-8 automática com .htaccess
para ter Apache Para codificar automaticamente seu conteúdo em UTF-8, use o código a seguir. Você também pode trocar o UTF-8 por outro conjunto de caracteres, se necessário:
# Use UTF-8 encoding for anything served text/plain or text/html
AddDefaultCharset utf-8
# Force UTF-8 for a number of file formats
AddCharset utf-8 .atom .css .js .json .rss .vtt .xml
Defina o fuso horário do servidor (para UTC ou outro fuso horário) com .htaccess
SetEnv TZ UTC
Veja uma lista de fusos horários. Para definir o fuso horário de Los Angeles:
SetEnv TZ America/Los_Angeles
Mudar para outro PHP Versão com .htaccess
Se você estiver em um host compartilhado, é provável que haja mais de uma versão do PHP instalado e, às vezes, você deseja uma versão específica para o seu site. Por exemplo, requer PHP >= 5.4. O seguinte trecho deve alternar o PHP versão para você.
AddHandler application/x-httpd-php55 .php
Alternativamente, você pode usar AddType
AddType application/x-httpd-php55 .php
Desativar o Modo de Exibição de Compatibilidade do Internet Explorer
O Modo de Exibição de Compatibilidade no IE pode afetar a exibição de alguns sites. O trecho a seguir deve forçar o IE a usar o Edge. Rendering Engine e desabilitar o Modo de Exibição de Compatibilidade.
<IfModule mod_headers.c>
BrowserMatch MSIE is-msie
Header set X-UA-Compatible IE=edge env=is-msie
</IfModule>
Execute PHP com uma extensão de arquivo diferente com .htaccess
O código a seguir executará arquivos terminados em .ext com php:
AddType application/x-httpd-php .ext
Servir imagens WebP automaticamente se existirem
Se imagens WebP forem suportadas e uma imagem com extensão .webp e o mesmo nome for encontrada no mesmo lugar que a imagem jpg/png que será veiculada, a imagem WebP será veiculada.
RewriteEngine On
RewriteCond %{HTTP_ACCEPT} image/webp
RewriteCond %{DOCUMENT_ROOT}/$1.webp -f
RewriteRule (.+)\.(jpe?g|png)$ $1.webp [T=image/webp,E=accept:1]
Configurar a hospedagem pode ser confuso. É por isso que criamos HostScore Ajuda de configuração, um serviço pronto para você configurar sua hospedagem da maneira correta.
Nós ajudamos com SSL instalação, configuração de DNS e servidor de nomes, WordPress instalação ou migração e ajustes de segurança. Taxa única. Com garantia de reembolso de 100%.
Explore nossos serviçosResumindo
As .htaccess O arquivo é uma ferramenta poderosa, mas é importante usá-lo com sabedoria. Embora possa ser tentador adicionar regras extras para soluções rápidas, lembre-se de que .htaccess não é um arquivo de configuração primário.
Cada vez que um servidor encontra um .htaccess arquivo, ele deve lê-lo e executá-lo, substituindo as principais configurações. Esse processo consome recursos e pode deixar seu site lento, especialmente se usado em excesso. Sempre que possível, aplique as configurações diretamente no nível do servidor (por exemplo, em Apachearquivo de configuração principal) para melhor desempenho.
Usando .htaccess eficientemente e combinando-o com um plano de hospedagem bem otimizado – você pode melhorar a segurança, o desempenho e a escalabilidade do seu site
Perguntas freqüentes
Devo usar .htaccess?
No sentido de uso global, o .htaccess arquivo pode oferecer muita conveniência. No entanto, isso tem um custo potencialmente alto em recursos do servidor. Sempre que possível, confie na configuração do servidor principal em vez do .htaccess arquivo.
Como eu sei se meu .htaccess está funcionando?
A maneira mais simples de garantir sua .htaccess arquivo está funcionando é visitar o URL do diretório em que você o colocou. Se não estiver funcionando, você provavelmente encontrará um erro interno do servidor 500.
Posso ter vários .htaccess arquivos?
.htaccess Tecnicamente, os arquivos podem ser colocados em cada diretório que você deseja configurar. Se você administra vários sites, cada diretório inicial pode ter seu próprio arquivo – além de um em cada subdiretório abaixo dele.
Qual é a regra de reescrita no htaccess?
Reescrever é uma Apache Módulo que permite reescrever solicitações de URL. Ele simplesmente recebe uma solicitação e a direciona para uma que você especificou para substituí-la.