Tutorial Apache: htaccess - Devin
O .htaccess é um arquivo especial para o Apache. Quando um usuário está navegando por alguma página do seu servidor Apache, para todo diretório que ele tentar acessar (e se o servidor estiver configurado para isso), o Apache procura pelo tal do .htaccess e se encontrar, verifica alguma restrição ou liberação para o usuário. Com isso podemos fazer duas coisas básicas em relação à segurança: Restringir acesso aos arquivos e diretórios do servidor Web através de um usuário e senha, ou então pelo IP/Hostname de quem está acessando. Trataremos dos dois assuntos aqui neste tutorial.
Antes de mais nada, você precisará se certificar que o Apache está configurado para aceitar os arquivos .htaccess como arquivos especiais. Para configurar, você precisará editar o arquivo de configuração do Apache, que é o "httpd.conf". Geralmente ele está localizado no diretório "/etc/httpd/conf". Dentro deste arquivo, você encontrará uma ou duas diretrizes mais ou menos desta forma:
Nesta configuração do Apache, tudo que está dentro das significa restrtições e opções especialmente configuradas para aquele diretório. No caso acima, eu estou aplicando algumas regras tanto no diretório base do servidor Web (ou seja, todo o servidor Web, independente do domínio virtual ou qualquer outra coisa), como também estou aplicando no diretório "/var/www/html", que aqui no caso é onde ficam as páginas Web. Então cabe a você decidir escolher entre as duas diretrizes (ou utilizar a configuração nova nas duas diretrizes mesmo, ou até então criar uma diretriz nova). Como eu quero ativar o .htaccess em todo o meu servidor Web, vou colocar da seguinte maneira:
O que eu fiz aqui foi adicionar a opção "Indexes" neste diretório e colocar o valor "AuthConfig" no AllowOverride. Em "Options", eu digo algumas opções extras que podem ser colocadas neste diretório. Isso não tem muito haver com este tutorial e nem é necessário, mas é sempre bom saber alguma coisa a mais se já não se sabe :)
Como a própria documentação do Apache diz, podemos usar as seguintes opções para diretórios: "None", "All", ou qualquer combinação de "Indexes", "Includes", "FollowSymLinks", "ExecCGI", or "MultiViews". A opção "Indexes" faz com que quando não tiver nenhum arquivo do tipo index.html, index.htm, ou "páginas iniciais", o Apache cria uma página com a lista dos arquivos existentes no diretório. O "Includes" permite colocar arquivos do tipo SSI (Server Side Includes), que são páginas dinâmicas antigamente usadas por muitos (Agora a moda é PHP, Python, Perl, etc). O "FollowSymLinks" faz com que o Apache aceite links simbólicos no sistema, seguindo os diretórios ou arquivos que os links apontam. O "ExecCGI" faz com que neste diretório possam ser executados arquivos CGI (Common Gateway Interface). A opção ExecCGI pode ser (e geralmente é) encontrada para o diretório "/var/www/cgi-bin", onde estão localizados os scripts CGI. Já o "multiViews" serve para por exemplo, servir páginas de acordo com a preferência de língua do usuário (index.html.pt_BR, indeex.html.en, etc).
O All significa todas as opções (menos o MultiViews) e o None significa nenhuma :)
Deixando de lado essa parte, vamos ao que realmente interessa. A opção "AllowOverride AuthConfig" é a que diz para o Apache verificar pelos arquivos .htaccess nos diretórios e aplicar as regras contidas no arquivo nos diretórios e subdiretórios de onde o arquivo esteja localizado. Colocada esta opção, é só dar um restart ou reload no servidor Web e tudo funcionará.
Para fins de entendimento, o nome "AllowOverride" já diz tudo: Ele sobrescreve as configurações padrões do servidor Apache para colocar novas configurações para aquele diretório. Estas configurações podem ser permissões dee acesso, opções (como as que mostrei acima), entre outros.
Utilizando o .htaccess
Agora que o servidor Apache já está configurado, teremos que criar o arquivo .htaccess com as regras. Utilize o seu editor prefeiro (no meu caso, o vim). Poderemos fazer várias coisas neste arquivo. Neste tutorial estarei usando vários arquivos .htaccess para demonstrar cada opção à cada caso, mas você pode utilizar um .htaccess no diretório principal do seu servidor, e definir as permissões e opções colocando-as dentro de tags , , etc. Tentarei dar alguns exemplos aqui.
As vezes precisamos restringir certos arquivos e diretórios para cecrtos IPs. Isso é válido por exemplo, quando você tem um provedor, e só se quer permitir acessar algumas páginas de administração os IPs da Intranet do provedor. Para isso pode-se aplicar estas regras no .htaccess. Veja o exemplo abaixo:
# Deixa a Intranet acessar
Esse exemplo de .htaccess fará com que o diretório, seus arquivos e seus subdiretórios só poderão ser acessados por quem estiver na faixa de IP de 192.168.0.1 até 192.168.0.254. Vamos supor agora que eu queira restringir apenas 1 IP, para não acessar um certo diretório. O .htaccess ficaria assim:
# Deixa todo mundo acessar, menos o IP 192.168.0.25
deny from 192.168.0.25
E está feito, quando o IP 192.168.0.25 tentar acessar, não vai conseguir. Você pode substituir o IP por um hostname, contanto que a opção "HostnameLookups" no httpd.conf esteja habilitada (on).
Restringindo o acesso por usuário e senha
Agora vem uma parte muito interessante. As vezes não temos como restringir apenas por IPs, seja porque o usuário que tem que acessar possa etar em qualquer lugar, ou ter IP dinâmico, etc. Para resolver esse caso, podemos utilizar o método de usuário e senha. Antes de mais nada você terá que ter o utilitário "htpasswd", que serve para criar um arquivo de senhas criptografadas. Neste tutorial, criaremos 3 usuários exemplo:
$ mkdir /etc/httpd/auth
$ cd /etc/httpd/auth
$ htpasswd -c acesso hugo
Adding password for user hugo
$ htpasswd acesso eitch
Adding password for user eitch
$ htpasswd acesso sakura
Adding password for user sakura
O resultado que temos é o arquivo /etc/httpd/auth/acesso com o seguinte conteúdo:
hugo:zEerw0euqYD3k
eitch:85QVc5DD0rB8M
sakura:UpZuXkyuIq9hw
Observação: Caso você não tenha o utilitário htpasswd, você pode criar as senhas criptografadas com um comando do perl. Por exemplo, se eu quiser criar a senha criptografada chamada "minhasenha", farei o seguinte comando:
$ perl -e 'print crypt("minhasenha", "Lq"), "\n";'
E então é só incluir a senha no arquivo como no esquema acima.
Como pode ver, as senhas estão criptografadas. Este armazenamento de senhas é muito simples. Há outros métodos de se armazenar senhas (arquivos de banco de dados por exemplo), mas por enquanto não vou cobrir isto no tutorial porque não é tão necessário. Mas fica extremamente necessário se houver muitos e muitos usuários e senhas, pois se houver muitos, o processo de autenticação pode demorar um pouco.
Agora que o arquivo de usuários e senhas está criado, vamos criar o .htaccess que irá verificar este arquivo. Veja o exemplo do .htaccess:
AuthName "Acesso Restrito à Usuários"
AuthUserFile /etc/httpd/auth/acesso
Salve o arquivo e pronto, quando um usuário acessar a URL, o servidor irá verificar este arquivo .htaccess e irá perguntar pro cliente um usuário e senha. Epa, mas peraí, vamos explicar direitinho o arquivo acima!
AuthName: O nome que aparece como mensagem de Login. Pode usar algo como "Entre com Login e Senha", ou coisa deste tipo.
AuthType: Tipo de autenticação. Atualmente o Basic é o tipo mais comum. Existe também o "Digest", mas ainda não é muito utilizado e suportado pelos clientes.
AuthUserFile: Onde está o arquivo de usuários e senhas que agente criou.
require valid-user: O que o Apache precisa para validar o acesso. Neste caso a gente indicou que precisa de um usuário válido para acessar a página, ou seja, alguém que digitou um usuário e senha e bateu com o que está no arquivo de senhas. Pode-se restringir para apenas alguns usuários do arquivo de senhas. Por exemplo, se eu quisesse restringir apenas para o usuário eitch e sakura, ao invés de "require valid-user", ficaria "require user eitch sakura".
Mas se por acaso você tiver muitos usuários, e quer dividí-los em grupos, você pode muito bem fazer isso! Primeiro teremos que criar o arquivo com os grupos. Use o seu editor preferido, e vamos criar por exemplo, o arquivo "/etc/httpd/auth/grupos":
admin:hugo eitch
visitante: sakura
empresa: hugo eitch sakura
Salve o arquivo e então criamos três grupos. Para usar estes grupos, teremos que modificar o arquivo .htaccess anterior para ficar desta maneira:
AuthGroupFile /etc/httpd/auth/grupos
No arquivo acima eu adicionei a linha "AuthGroupFile", que indica pro servidor onde está o arquivo dos grupos (bem parecido com o "AuthUserFile" hein?) e no "require", coloquei que requer o grupo admin. Simples de entender, não? Agora já dá pra brincar bastante restringindo usuários :)
Lembra da diretriz "Options"? Pois é, você pode colocar estas opções também no .htaccess. Se por exemplo você quer que o diretório onde você colocou o .htaccess liste os arquivos caso não haja um index.html da vida, você adiciona o seguinte no .htaccess:
E para tirar essa opção:
E nisso você pode usar para qualquer uma das opções.
Caso você não saiba os códigos de erro do Apache, a configuração do apache 2.x já tem uma boa ajuda quanto a isto, vou colocar as linhas aqui como referência (entenda se quiser e puder :P):
Opções para arquivos e diretórios específicos
Agora vamos supor que você queira somente fazer restrições para certos arquivos e diretórios. Para isso você poderá fazer tudo o que fazia antes, só que dentro de tags como ou . Veja o exemplo de .htaccess a seguir com comentários embutidos explicando o contexto:
# Restringe o arquivo_secreto.html somente para o IP 192.168.0.30
<Files arquivo_secreto.html>
Allow from 192.168.0.30
# Restringe o diretório admin para utilizar senhas
# Nega o acesso dos clientes ao .htaccess (bom colocar no httpd.conf)
# – Vem com a configuração padrão do Apache
Entendeu bem como funciona o esquema? Então é só brincar bastante :)
Pudemos aprender bastante como mexer com o .htaccess, mas o que vimos aqui não foi tudo não. Tem muita coisa ainda que se dá para colocar no .htaccess. Como eu disse no início dedste tutorial, o .htaccess poded comportar todo tipo de configuração de diretórios do Apache, sobrescrevendo as configurações padrões contidas no httpd.conf. Explorar as funcionalidades é uma questão de prática, então mãos a obra!
apache configuração htaccess tutorial web
93 respostas para "Tutorial Apache: htaccess"
URLs Amigáveis – .htaccess « Adriano Godoy disse:
4 de maio de 2012 às 11:43 pm
[...] ou se já existir, edite o .htaccess da pasta raiz de seu site. (sugiro que leiam um pouco sobre o .htaccess antes de prosseguir). No seu .htaccess ficarão as regras de reescrita, ou rewrite [...]
30 de outubro de 2012 às 7:19 pm
preciso de ajuda… tenho um site bloqueado pelo apache 2.2 como eu faço para desbloquear este site.
Lidando com o 404 nos servidores Web - iMasters disse:
17 de abril de 2013 às 9:01 am
[...] htaccess (Devin). [...]
Lidando com o 404 nos servidores Web - Devin disse:
10 de julho de 2013 às 6:53 pm
22 de julho de 2013 às 11:56 am
Como faço para saber quantos usuários estão conectados no Apache?
22 de julho de 2013 às 1:08 pm
Você pode usar o Apache mod_sttatus para obter uma página de status do seu Apache atual. Para isso, você tem que ter habilitado o módulo mod_status (geralmente já vem habilitado), com a linha na configuração:
Depois você precisa configurar a URL do status, como no exemplo:
Substituindo o .example.com por um IP/host permitido. O acesso do resto será negado.
Por último, para habilitar o ExtendedStatus, que fornece mais informações:
Protegendo o login do WordPress contra força bruta (wordpress bots) - Devin disse:
2 de outubro de 2013 às 1:11 am
[...] Nota: Usamos o arquivo .htaccess para fazer essa configuração, mas você pode colocar essas regras de Rewrite em outros lugares do Apache também (Directory, LocationMatch, VirtualHost, etc). Se quiser saber de mais informações sobre o arquivo htaccess no Apache, leia também o Tutorial Apache: htaccess. [...]
31 de março de 2014 às 2:37 pm
Alquem mim ajudar a tirar umas restrinções de um sistema adminstrativo que gerencia sites?
allexboy@live.com
041 88 9636-7475
18 de julho de 2015 às 11:56 pm
Boa noite, muita boa explicação, mas ainda tenho uma grande dúvida que me fez travar em meu projeto.
Alguém poderia me ajudar com algo?
RewriteRule ^imgs/(([a-z]+).(jpg|jpeg|png|gif|bmp))?$ img.php?foto=$1 [NC,L]
a intenção disso é fazer com que caso a imagem seja aberta, sejam executados alguns comandos, e após isto, via GET, a imagem seja identificada e seja mostrada na tela, de forma que a URL (imgs/exemplo.jpg) mantenha-se, mas por trás ela seja tratada como "img.php?foto=exemplo.jpg".
Eu não consigo exibir imagem alguma. O Apache entra em um loop e não retorna a figura… Apenas executa o script PHP e não a exibe.
Haveria alguma forma de contornar esse problema? Ou outra forma de executar o código PHP, preferivelmente de alguma forma onde a URL possa ser mantida, sem mostrar que se trata de um arquivo PHP.
Por favor, alguém poderia dar uma força? Não encontro ajuda em lugar nenhum…
20 de junho de 2016 às 10:46 am
ola! eu estava pensando se ha algum modo para que o que vou explicar funcione :D
bom, estava pensando em bloquear a pasta localhostdownload_update, (estou fazendo os testes localmente) ate que conseguir das duas maneiras
#AuthName "Uniform Server – Server Access"
#AuthUserFile ../../htpasswd/www/_updater/.htpasswd
mas… a finalidade dessa pasta eh para que o meu programa verifique se houve novas atualizacoes e se houver ele faca os devidos updates, entao se eu "travar" esta pasta tanto com senha ou para todos, ele tenta e retorna em erro por que nao consegue baixar o arquivo verificador de arquivos novos o "file.lst"
dai a questao: existe algum modo para que essa pasta seja apenas bloqueada se o usuario acessar por meio de navegadores ? http://www.meusite.com.br/_updater
You don't have permission to access /_updater on this server.
mas fosse liberado usando as configuracoes do arquivo de atualizacoes
Iusky disse:
20 de setembro de 2016 às 9:34 am
Pessoal, tenho uma duvida, estou o servidor apache aqui rodando legal e tudo, mas, como posso saber quem está entrando meu site? Tipo assim, existe alguma forma, um log que registre os acessos do usuários clientes?
cho thuê căn hộ rivera park disse:
24 de julho de 2018 às 11:37 pm
3 de agosto de 2018 às 4:51 am
Um varão ԁeve ocupar um lugar еm sua vida.
3 de novembro de 2018 às 11:22 pm
Enquanto vejo um ponto que palato de forma, leio o texto todo
e quero mais. Espero que você continua a renovar seu blog assim.
pickwickcrc disse:
15 de janeiro de 2019 às 11:41 am
oakley holbrook sunglasses 80s style mens nike cleveland browns 87 seth devalve limited brown tank top suit nfl jersey nike free run 3 royal blue nike air max tavas university red buy alle wei脽 air max 95 grade school nike air max 2017.5 womens green blue
21 de junho de 2019 às 10:46 am
Ótima essa explicação,adorei
Garotas de programa disse:
23 de julho de 2019 às 2:10 am
O lítico de seu sítio da Internet é que resta
fácil para todo mundo apreender o que você ora manifestar.
Usa termo formosa porém boa de entender.
12 de agosto de 2019 às 2:54 am
Você escreve muito muito e também espero que continue por bastante tempo porque conheci seu sítio da
Internet atualmente mesmo. Até mais.
Canais Smart TV disse:
20 de agosto de 2019 às 11:35 pm
acompanhantes de sp disse:
24 de agosto de 2019 às 7:49 am
Concordo com sua epílogo. As vezes é difícil para quem
Www.Soasgatas.Net disse:
28 de agosto de 2019 às 6:58 pm
Isso mesmo, as vezes é necessário expor
bem com vocábulo fácil de apreender, como vi cá nesse texto.
Prosseguirei ler outro artigo desse blogue.
Gatas Com Local disse:
6 de dezembro de 2019 às 11:59 am
FANTÁSTICO E MAGNIFICO ADOREI A EXPLICAÇÃO
Travestilocal disse:
6 de dezembro de 2019 às 12:00 pm
Queria faze com q toda vez q acessacem a pagina do squid 192.168.0.x/squid pedice usuario e senha.
CONQUISTA SEXY disse:
6 de dezembro de 2019 às 12:02 pm
Boa explicaçao gostei ficou muito bom
6 de março de 2020 às 11:46 pm
Acompanhantes Recife disse:
25 de março de 2020 às 4:30 pm
25 de março de 2020 às 4:33 pm
Famosas Nua disse:
25 de março de 2020 às 4:38 pm
30 de março de 2020 às 12:15 am
30 de março de 2020 às 5:48 pm
belo aprendizado pelo menos para mim
30 de março de 2020 às 6:15 pm
31 de março de 2020 às 8:10 am
Estou tentando acessar um arquivo com o tipo .dm (drm), alguem sabe me explicar como devo configurar o apache? é via .htacess ou pelo httpd.conf? A mensagem que aparece é "Type is not recognized"
acompanhantes cps disse:
31 de março de 2020 às 8:11 am
muito bom seu tutorial! um bom resumo das principais das configurações do apache!
Advogado Recife disse:
4 de abril de 2020 às 1:18 pm
Excelente matéria sobre como configurar o apache.
Gatasrv disse:
16 de abril de 2020 às 12:35 pm
16 de abril de 2020 às 12:36 pm
19 de abril de 2020 às 1:14 am
tópico super interessante!
19 de abril de 2020 às 1:16 am
Poderia inserir informações para forçar o uso de https ou http e www ou no www.
25 de abril de 2020 às 1:49 pm
gostaria de um consultor porq nao sei porq o dr do meu site nao sobe
25 de julho de 2020 às 1:49 am
nesse aqrquivo e melhor forma de fazer todos os redierecinamentos
27 de julho de 2020 às 10:11 pm
deveria falar do robos.txt tambem
GPVicio disse:
28 de julho de 2020 às 12:18 am
O melhor site de acompanhantes de Curitiba é o GPVicio Acompanhantes.
Acesse já, e confira as mulheres mais lindas de Curitiba e do Estado do Paraná. https://www.gpvicio.com.br
Acompanhantes Curitiba / Acompanhantes Araucária / Acompanhantes Londrina / Acompanhantes Pinhais / Acompanhantes São José dos Pinhais / Acompanhantes Cascavel / Acompanhantes Ponta Grossa / Acompanhantes Foz do Iguaçu / Acompanhantes Colombo / Acompanhantes Toledo / Acompanhantes Campo Largo / Acompanhantes Fazenda Rio Grande / Acompanhantes Paranavaí / Acompanhantes Pato Branco / Acompanhantes de todo Paraná
Acompanhantes Curitiba e acompanhantes do Paraná https://www.curitibaacompanhantes.com.br
Acompanhantes Vip, modelos e massagistas de Curitiba e do Paraná. Mulheres, homens e transex https://www.curitibavip.com.br