1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
|
<?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:1002119 (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="core">AuthType</directive>
<directive module="core">AuthName</directive>
<directive module="mod_authn_file">AuthUserFile</directive>
<directive module="mod_authz_groupfile">AuthGroupFile</directive>
<directive module="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>
|