mirror of
https://github.com/apache/httpd.git
synced 2025-04-26 12:28:56 +03:00
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1742728 13f79535-47bb-0310-9956-ffa450edef68
398 lines
18 KiB
XML
398 lines
18 KiB
XML
<?xml version='1.0' encoding='UTF-8' ?>
|
|
<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
|
|
<?xml-stylesheet type="text/xsl" href="../style/manual.pt-br.xsl"?>
|
|
<!-- English Revision: 151408:1741842 (outdated) -->
|
|
|
|
<!--
|
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
|
contributor license agreements. See the NOTICE file distributed with
|
|
this work for additional information regarding copyright ownership.
|
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
|
(the "License"); you may not use this file except in compliance with
|
|
the License. You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
-->
|
|
|
|
<manualpage metafile="htaccess.xml.meta">
|
|
<parentdocument href="./">How-To / Tutoriais</parentdocument>
|
|
|
|
<title>Tutorial do Apache: arquivos .htaccess</title>
|
|
|
|
<summary>
|
|
<p>Arquivos <code>.htaccess</code> oferecem um meio de fazer mudanças
|
|
nas configurações por-diretório.</p>
|
|
</summary>
|
|
|
|
<section id="related"><title>Arquivos .htaccess </title>
|
|
<related>
|
|
<modulelist>
|
|
<module>core</module>
|
|
<module>mod_authn_file</module>
|
|
<module>mod_authz_groupfile</module>
|
|
<module>mod_cgi</module>
|
|
<module>mod_include</module>
|
|
<module>mod_mime</module>
|
|
</modulelist>
|
|
|
|
<directivelist>
|
|
<directive module="core">AccessFileName</directive>
|
|
<directive module="core">AllowOverride</directive>
|
|
<directive module="core">Options</directive>
|
|
<directive module="mod_mime">AddHandler</directive>
|
|
<directive module="core">SetHandler</directive>
|
|
<directive module="mod_authn_core">AuthType</directive>
|
|
<directive module="mod_authn_core">AuthName</directive>
|
|
<directive module="mod_authn_file">AuthUserFile</directive>
|
|
<directive module="mod_authz_groupfile">AuthGroupFile</directive>
|
|
<directive module="mod_authz_core">Require</directive>
|
|
</directivelist>
|
|
|
|
</related>
|
|
</section>
|
|
|
|
<section id="what">
|
|
<title>O que eles são/Como usá-los</title>
|
|
|
|
<p>Os arquivos <code>.htaccess</code> (ou "arquivos de
|
|
configuração distribuída") oferecem um meio de fazer mudanças nas
|
|
configurações por-diretório. Um arquivo, contendo uma ou mais
|
|
diretrizes de configurações, é colocado em um diretório
|
|
em particular, e as diretrizes se aplicam para aquele diretório e todos
|
|
os seu subdiretórios subseqüentes.</p>
|
|
|
|
<note><title>Nota:</title>
|
|
<p>Se você quiser renomear o seu arquivo <code>.htaccess</code>
|
|
para outro nome, você deve usar a diretriz <directive
|
|
module="core">AccessFileName</directive>. Por exemplo, se você
|
|
prefere que o arquivo se chame <code>.config</code>, então você
|
|
pode adicionar a seguinte linha ao seu arquivo de configuração
|
|
do servidor:</p>
|
|
|
|
<example>
|
|
AccessFileName .config
|
|
</example>
|
|
</note>
|
|
|
|
<p>No geral, arquivos <code>.htaccess</code> usam a mesma sintaxe
|
|
que os <a href="../configuring.html#syntax">arquivos de
|
|
configuração principal</a>. O que você pode colocar nesses
|
|
arquivos é determinado pele diretriz <directive
|
|
module="core">AllowOverride</directive>. Essa diretriz especifica,
|
|
em categorias, quais diretrizes serão aceitas caso sejam
|
|
encontradas em um arquivo <code>.htaccess</code>. Se uma diretriz
|
|
for permitida em um arquivo <code>.htaccess</code>, a documentação
|
|
para essa diretriz irá conter uma seção <em>Override</em>,
|
|
especificando que valor precisa estar em <directive
|
|
module="core">AllowOverride</directive> para que esta diretriz
|
|
seja permitida.</p>
|
|
|
|
<p>Por exemplo, se você procurar na documentação pela diretriz
|
|
<directive module="core">AddDefaultCharset</directive>, você
|
|
achará que ela é permitida nos arquivos <code>.htaccess</code>.
|
|
(Veja a linha Contexto no sumário das diretivas.) A
|
|
linha <a href="../mod/directive-dict.html#Context">Override</a> lê
|
|
<code>FileInfo</code>. Então, você deve ao menos ter
|
|
<code>AllowOverride FileInfo</code> para que essa diretriz seja
|
|
aceita nos arquivos <code>.htaccess</code>.</p>
|
|
|
|
<example><title>Exemplo:</title>
|
|
<table>
|
|
<tr>
|
|
<td><a
|
|
href="../mod/directive-dict.html#Context">Contexto:</a></td>
|
|
<td>configuração do servidor, hospedeiros virtuais, diretório, .htaccess</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td><a
|
|
href="../mod/directive-dict.html#Override">Override:</a></td>
|
|
<td>FileInfo</td>
|
|
</tr>
|
|
</table>
|
|
</example>
|
|
|
|
<p>Se você estiver incerto se uma diretriz em particular é
|
|
aceita em um arquivo <code>.htaccess</code>, procure na
|
|
documentação por essa diretriz, e verifique a linha de
|
|
Contexto por ".htaccess".</p> </section>
|
|
|
|
<section id="when"><title>Quando (não) usar arquivos .htaccess</title>
|
|
|
|
<p>No geral, você nunca deve usar arquivos <code>.htaccess</code>
|
|
a não ser que você não tenha acesso ao arquivo de configuração
|
|
principal do servidor. Existe, por exemplo, um erro de concepção
|
|
que dita que a autenticação de usuários sempre deve
|
|
ser feita usando os arquivos <code>.htaccess</code>. Esse
|
|
simplesmente não é o caso. Você pode usar as configurações de
|
|
autenticação de usuário no arquivo de configuração principal do
|
|
servidor, e isso é, de fato, a maneira mais adequada de se fazer
|
|
as coisas.</p>
|
|
|
|
<p>Arquivos <code>.htaccess</code> devem ser usados em casos onde
|
|
os provedores de conteúdo do site precisem fazer mudanças na
|
|
configuração do servidor por-diretório, mas não tem
|
|
acesso <em>root</em> ao sistema do servidor. Caso o administrador do
|
|
servidor não esteja disposto a fazer mudanças freqüentes nas
|
|
configurações do servidor, é desejável permitir que os
|
|
usuários possam fazer essas mudanças através de arquivos
|
|
<code>.htaccess</code> eles mesmos. Isso é particularmente
|
|
verdade, por exemplo, em casos onde provedores estão fornecendo
|
|
múltiplos sites para usuários em apenas uma máquina, e querem que
|
|
seus usuários possam alterar suas configurações.</p>
|
|
|
|
<p>No entanto, de modo geral, o uso de arquivos <code>.htaccess</code>
|
|
deve ser evitado quando possível. Quaisquer configurações
|
|
que você considerar acrescentar em um arquivo <code>.htaccess</code>, podem
|
|
ser efetivamente colocadas em uma seção <directive module="core"
|
|
type="section">Directory</directive> no arquivo principal de
|
|
configuração de seu servidor.</p>
|
|
|
|
<p>Existem duas razões principais para evitar o uso de arquivos
|
|
<code>.htaccess</code>.</p>
|
|
|
|
<p>A primeira delas é a performance. Quando <directive
|
|
module="core">AllowOverride</directive> é configurado para
|
|
permitir o uso de arquivos <code>.htaccess</code>, o Apache procura
|
|
em todos diretórios por arquivos <code>.htaccess</code>.
|
|
Logo, permitir arquivos <code>.htaccess</code> causa um impacto na
|
|
performance, mesmo sem você usá-los de fato! Além disso,
|
|
o arquivo <code>.htaccess</code> é carregado toda vez que um documento
|
|
é requerido.</p>
|
|
|
|
<p>Além disso, note que o Apache precisa procurar pelos arquivos
|
|
<code>.htaccess</code> em todos os diretórios superiores, para ter
|
|
o complemento total de todas as diretivas que devem ser
|
|
aplicadas. (Veja a seção <a href="#how">como as diretrizes são
|
|
aplicadas</a>.) Então, se um arquivo de um diretório
|
|
<code>/www/htdocs/example</code> é requerido, o Apache precisa
|
|
procurar pelos seguintes arquivos:</p>
|
|
|
|
<example>
|
|
/.htaccess<br />
|
|
/www/.htaccess<br />
|
|
/www/htdocs/.htaccess<br />
|
|
/www/htdocs/example/.htaccess
|
|
</example>
|
|
|
|
<p>Assim, para cada acesso de arquivo fora desse diretório,
|
|
existem 4 acessos ao sistema de arquivos adicionais, mesmo
|
|
que nenhum desses arquivos estejam presentes. (Note que esse
|
|
só será o caso se os arquivos <code>.htaccess</code>
|
|
estiverem habilitados para <code>/</code>, o que
|
|
normalmente não é o verdade.)</p>
|
|
|
|
<p>A segunda consideração é relativa à segurança.
|
|
Você está permitindo que os usuários modifiquem as
|
|
configurações do servidor, o que pode resultar em mudanças
|
|
que podem fugir ao seu controle. Considere com cuidado se você quer
|
|
ou não dar aos seus usuários esses privilégios. Note também
|
|
que dar aos usuários menos privilégios que eles precisam, acarreta em
|
|
pedidos de suporte técnico adicionais. Tenha certeza que você comunicou
|
|
aos usuários que nível de privilégios você os deu.
|
|
Especificar exatamente o que você configurou na diretriz <directive
|
|
module="core">AllowOverride</directive>, e direcioná-los para a
|
|
documentação relevante, irá poupá-lo de muita confusão
|
|
depois.</p>
|
|
|
|
<p>Perceba que é exatamente equivalente colocar o arquivo
|
|
<code>.htaccess</code> em um diretório
|
|
<code>/www/htdocs/example</code> contendo uma diretriz, e
|
|
adicionar a mesma diretriz em uma seção <em>Directory</em>
|
|
<code><Directory /www/htdocs/example></code> na configuração
|
|
principal do seu servidor:</p>
|
|
|
|
<p>Arquivo <code>.htaccess</code> em <code>/www/htdocs/example</code>:</p>
|
|
|
|
<example><title>Conteúdo de um arquivo .htaccess em
|
|
<code>/www/htdocs/example</code></title>
|
|
AddType text/example .exm
|
|
</example>
|
|
|
|
<example><title>Seção do seu arquivo <code>httpd.conf</code></title>
|
|
<Directory /www/htdocs/example><br />
|
|
<indent>
|
|
AddType text/example .exm<br />
|
|
</indent>
|
|
</Directory>
|
|
</example>
|
|
|
|
<p>No entanto, adicionando isso ao seu arquivo de configuração do
|
|
servidor resultará em uma menor perda de performance, na medida que
|
|
a configuração é carregada no momento da inicialização do
|
|
servidor, ao invés de toda que que um arquivo é requerido.</p>
|
|
|
|
<p>O uso de arquivos <code>.htaccess</code> pode ser totalmente
|
|
desabilitado, ajustando a diretriz <directive
|
|
module="core">AllowOverride</directive> para <code>none</code>:</p>
|
|
|
|
<example>
|
|
AllowOverride None
|
|
</example>
|
|
</section>
|
|
|
|
<section id="how"><title>Como as diretrizes são aplicadas</title>
|
|
|
|
<p>As diretrizes de configuração que se encontram em um arquivo
|
|
<code>.htaccess</code> são aplicadas para o diretório no qual o
|
|
arquivo <code>.htaccess</code> se encontra, e para todos os
|
|
subdiretórios ali presentes. Mas, é importante lembrar também que
|
|
podem existir arquivos <code>.htaccess</code> no diretórios
|
|
superiores. As diretrizes são aplicadas na ordem que são
|
|
achadas. Logo, um arquivo <code>.htaccess</code> em um diretório
|
|
em particular, pode sobrescrever as diretrizes encontradas em um
|
|
diretório acima deste em sua respectiva árvore. Estes, por sua vez,
|
|
podem ter suas diretrizes sobrescritas por diretrizes ainda mais
|
|
acima, ou no próprio arquivo de configuração principal do
|
|
servidor.</p>
|
|
|
|
<p>Exemplo:</p>
|
|
|
|
<p>No diretório <code>/www/htdocs/example1</code> nós temos
|
|
um arquivo <code>.htaccess</code> contendo o seguinte:</p>
|
|
|
|
<example>
|
|
Options +ExecCGI
|
|
</example>
|
|
|
|
<p>(Nota: você deve ter "<code>AllowOverride Options</code>" para
|
|
permitir o uso da diretriz "<directive
|
|
module="core">Options</directive>" nos arquivos
|
|
<code>.htaccess</code> .)</p>
|
|
|
|
<p>No diretório <code>/www/htdocs/example1/example2</code> nós temos
|
|
um arquivo <code>.htaccess</code> contendo:</p>
|
|
|
|
<example>
|
|
Options Includes
|
|
</example>
|
|
|
|
<p>Devido a esse segundo arquivo <code>.htaccess</code>, no
|
|
diretório <code>/www/htdocs/example1/example2</code>, a execução
|
|
de scripts CGI não é permitida, pois somente <code>Options
|
|
Includes</code> está em efeito, o que sobrescreve completamente
|
|
quaisquer outros ajustes previamente configurados.</p>
|
|
</section>
|
|
|
|
<section id="auth"><title>Exemplo de Autenticação</title>
|
|
|
|
<p>Se você veio diretamente à esta parte do documento para
|
|
aprender como fazer autenticação, é importante notar uma
|
|
coisa. Existe uma concepção errada, mas muito comum, de que é
|
|
necessário o uso de arquivos <code>.htaccess</code> para implementar
|
|
a autenticação por senha. Este não é o caso. Colocar
|
|
diretrizes de senha em uma seção <directive module="core"
|
|
type="section">Directory</directive>, no seu arquivo principal de
|
|
configuração do servidor, é a melhor maneira de se implementar
|
|
isto, e os arquivos <code>.htaccess</code> devem ser usados apenas
|
|
se você não tem acesso ao arquivo principal de configuração do
|
|
servidor. Veja <a href="#when">acima</a> a discussão sobre quando
|
|
você deve e quando não deve usar os arquivos
|
|
<code>.htaccess</code>.</p>
|
|
|
|
<p>Dito isso, se você ainda acredita que precisa usar um arquivo
|
|
<code>.htaccess</code>, a configuração a seguir provavelmente
|
|
funcionará para você.</p>
|
|
|
|
<p>Conteúdo de um arquivo <code>.htaccess</code>:</p>
|
|
|
|
<example>
|
|
AuthType Basic<br />
|
|
AuthName "Password Required"<br />
|
|
AuthUserFile /www/passwords/password.file<br />
|
|
AuthGroupFile /www/passwords/group.file<br />
|
|
Require Group admins
|
|
</example>
|
|
|
|
<p>Note que <code>AllowOverride AuthConfig</code> precisa estar
|
|
habilitado para que estas diretrizes tenham efeito.</p>
|
|
|
|
<p>Por favor veja o <a href="auth.html">tutorial de
|
|
autenticação</a> para uma discussão mais completa sobre
|
|
autenticação e autorização.</p>
|
|
</section>
|
|
|
|
<section id="ssi"><title>Exemplo de Server Side Includes</title>
|
|
|
|
<p>Outro uso comum de arquivos <code>.htaccess</code> é ativar o
|
|
Server Side Includes para um diretório em particular. Isto pode
|
|
ser feito com as seguintes diretrizes de configuração, colocadas em
|
|
um arquivo <code>.htaccess</code> no diretório desejado:</p>
|
|
|
|
<example>
|
|
Options +Includes<br />
|
|
AddType text/html shtml<br />
|
|
AddHandler server-parsed shtml
|
|
</example>
|
|
|
|
<p>Note que ambos <code>AllowOverride Options</code> e
|
|
<code>AllowOverride FileInfo</code> precisam estar habilitados
|
|
para essas diretrizes terem efeito.</p>
|
|
|
|
<p>Por favor veja o <a href="ssi.html">tutorial de SSI</a> para
|
|
uma discussão mais completa sobre server-side includes.</p>
|
|
</section>
|
|
|
|
<section id="cgi"><title>Exemplo de CGI</title>
|
|
|
|
<p>Finalmente, você pode querer que um arquivo
|
|
<code>.htaccess</code> permita a execução de programas CGI em um
|
|
diretório em particular. Isto pode ser implementado com as
|
|
seguintes configurações:</p>
|
|
|
|
<example>
|
|
Options +ExecCGI<br />
|
|
AddHandler cgi-script cgi pl
|
|
</example>
|
|
|
|
<p>Alternativamente, se você desejar que todos os arquivos de um
|
|
dado diretório, sejam considerados programas CGI, isso pode ser
|
|
feito com a seguinte configuração:</p>
|
|
|
|
<example>
|
|
Options +ExecCGI<br />
|
|
SetHandler cgi-script
|
|
</example>
|
|
|
|
<p>Note que ambos <code>AllowOverride Options</code> e
|
|
<code>AllowOverride FileInfo</code> precisam estar habilitados
|
|
para que essas diretrizes tenham quaisquer efeito.</p>
|
|
|
|
<p>Por favor veja o <a href="cgi.html">tutorial de CGI
|
|
tutorial</a> para uma discussão mais completa sobre programação
|
|
e configuração CGI.</p>
|
|
</section>
|
|
|
|
<section id="troubleshoot"><title>Resolvendo Problemas</title>
|
|
|
|
<p>Quando você adiciona diretrizes de configuração em um arquivo
|
|
<code>.htaccess</code>, e não obtém o efeito desejado, existe uma
|
|
série de pontos que podem estar errados.</p>
|
|
|
|
<p>Mais comumente, o problema é que a diretriz <directive
|
|
module="core">AllowOverride</directive> não está habilitada
|
|
corretamente para que as suas diretrizes de configurações sejam
|
|
honradas. Verifique se você não possui <code>AllowOverride
|
|
None</code> ajustado para o escopo do arquivo em questão. Um bom
|
|
meio de testar isso é colocar "lixo" em seu arquivo
|
|
<code>.htaccess</code> e recarregá-lo. Se não for gerado nenhum
|
|
erro do servidor, certamente você tem <code>AllowOverride
|
|
None</code> habilitado.</p>
|
|
|
|
<p>Se, por outro lado, você está obtendo erros do servidor ao
|
|
tentar acessar documentos, verifique o registro de erros do
|
|
Apache. Ele provavelmente irá indicar que a diretriz usada em
|
|
seu arquivo <code>.htaccess</code> não é permitida.
|
|
Alternativamente, ele pode acusar erros de sintaxe que você terá
|
|
que corrigir.</p>
|
|
|
|
</section>
|
|
|
|
</manualpage>
|