.htaccess设置指南

上一篇 / 下一篇  2008-06-27 10:56:03 / 個人分類:php

A av T}:r0.htaccess 会降低APACHE的性能,除非你对目录权限要求很高或需要做UrlRewrite,否则不推荐你使用.

n$])Wz2\"F0

[;^c q#h!E0如果你的服务器目录结构是这样:若鄰博客_ {O\7a qI

若鄰博客,X1WZW#h;b F5?/J~!H

/usr/corsak/wwwroot/www/maindir

Y dhT0b0若鄰博客q2WF h1OV nG)g#C|

如果Apache指令中开启了AllowOverride支持.htaccess文件,每访问一次会依次搜索:若鄰博客+y5BeGx$@ A

若鄰博客CdBej(}ou3i

/usr/corsak/wwwroot/www/maindir/.htaccess若鄰博客3d4Me4liQ'Fd*K
/usr/corsak/wwwroot/www/.htaccess若鄰博客v(v3P#z4sS.k
/usr/corsak/wwwroot/.htaccess若鄰博客,b#M.\U@'|$| Z X0~

Zo!ThvN0下面是一份详细的文档,不知道哪年从哪找的。若鄰博客:A WE#O,OX T
因为在一个国外的空间的根文件夹下看到这个.htaccess,搞不懂是干什么的,在落伍论坛找到一篇文章,先转过来放着,以后再慢慢研究,嘿嘿.. 
:p$ISt4r\(PF"U0    Apache指南: .htaccess文件 若鄰博客~c d#^&[EhI'k3LSq2p'I)?

b-N;|:O#Z$p0.htaccess文件提供了针对目录改变配置的方法。 

#bC'g BK6F0若鄰博客 td:`;w!{o!Mx*w

  * .htaccess文件 
!G/s%n`QFI8_0  * 工作原理和使用方法 若鄰博客8ZYHT SRyL%`"|
  * 使用.htaccess文件的场合 
(Kd0n3?3s2Q0  * 指令的生效 若鄰博客 Z X h0@\U
  * 认证举例 
&?+KpaB3x4`F n0  * 服务器端包含举例 
JP`5I]$o0  * CGI举例 
,v }:w6j v8d0  * 疑难解答 

N q'z-b/kQ%sd;Q[0若鄰博客?mX+j;u*]1S

top 若鄰博客%G'_;Uyh.Q
.htaccess文件 若鄰博客,V-ke? H"T
相关模块     相关指令 若鄰博客7I fw2q}wb"i

若鄰博客8E'eOT;ALQ,m;Yf

  * core 若鄰博客^ @r#mr`8C%Ms
  * mod_auth 
:SJ.qwI0CI!PH0  * mod_cgi 
^6^rI~.f#Ff%X!Bn0  * mod_include 若鄰博客 Hq:V$VEu;pv
  * mod_mime 若鄰博客/{Q)ii-IO dF

若鄰博客![yHl~;|

     若鄰博客| v KAEJ

若鄰博客8h{,d5@!G4ej

  * AccessFileName 若鄰博客T%~@7Wf,W
  * AllowOverride 若鄰博客2C/ec6xf}
  * Options 
$JG(S i] d2gP#uY0  * AddHandler 若鄰博客,F7LkGv3V {8M
  * SetHandler 
hH5q%m/hK&Sh0  * AuthType 
!q#e|N9Gt0CS?3a0  * AuthName 
+XU&I+A.~4t0  * AuthUserFile 
k|'|4Er2B)us0  * AuthGroupFile 若鄰博客h5FA/q:FPYYS
  * Require 若鄰博客 rd:j ]0Z*n]1J

若鄰博客&\8_;i/`0jx"Ui

top 若鄰博客!qhhsnK(j9g8oI
工作原理和使用方法 

C:b,G$^ Y4y0若鄰博客pS"dh]9Mk(ns

.htaccess文件(或者"分布式配置文件"提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。 若鄰博客[2?GE@F

若鄰博客?r t ]9qv9`1HH

说明:如果需要使用.htaccess以外的其他文件名,可以用AccessFileName指令来改变。 例如,需要使用.config,则可以在服务器配置文件中按以下方法配置: 

(H%PC X!S A(o7jm/B)Y`0

v]'g#Zo:\E.v0AccessFileName .config 

#t,t+h-J.t5B ^S0

pl3Q(`"wwt(AJ0允许放在这些文件中的指令取决于AllowOverride指令, 此指令按类别决定了.htaccess文件中哪些指令才是有效的。 如果一个指令允许放在.htaccess文件中,则,在本手册的说明中,此指令会有一个覆盖段, 其中说明了为使此指令生效而必须在AllowOverride指令中设置的值。 若鄰博客 Nf6L+NMR:H @

&F5TMHR Fa4JX%`"E9? r0例如,本手册对AddDefaultCharset指令的说明表明了, 此指令可以用于.htaccess文件(见 Context一行),而Override一行是"FileInfo", 那么为使.htaccess中的此指令有效,则至少要设置"AllowOverride FileInfo"。 若鄰博客%Q6v:L5{;E^5_5?
例子: 
6`*A2`e/saY7|S0Context:     server config, virtual host, directory, .htaccess 若鄰博客h!z2{nfq8j
Override:     FileInfo 若鄰博客 Z9J.bj5x

若鄰博客WU_ F [

如果不能确定一个特定的指令是否允许用于.htaccess文件, 可以查阅手册中对指令的说明,看在Context(“上下文”)行中是否有".htaccess."。 
1n*n3mUSU we0top 
kAN?^x4b0使用.htaccess文件的场合 

7K6u5i*e2O9XO[!GQM0若鄰博客G#?{ H"i0x

一般情况下,不应该使用.htaccess文件,除非你对主服务器配置文件没有存取权限。 有一种很常见的误解,认为用户认证只能通过.htaccess文件实现,但并不是这样, 把用户认证写在主服务器配置中是完全可行的,而且是一种很好的方法。 

O;C$s)p7b~0

ECM {`XE0在内容提供者需要针对目录改变服务器的配置而对服务器系统没有root权限时, 则应该使用.htaccess文件。如果服务器管理员不愿意频繁修改配置, 则可以允许用户通过.htaccess文件自己修改配置,尤其是ISP在一个机器上 宿主多个用户站点,而又希望用户可以自己改变配置的情况下。 

\$N'P+?j!u%um0若鄰博客N%` k%lfZ

虽然如此,一般都应该尽可能地避免使用.htaccess文件。 任何希望放在.htaccess文件中的配置,都可以放在主服务器的<Directory>段中,而且更高效。 

2fv LAG)J0

;ZbOCs(mxF!b&|5]!e0避免使用.htaccess文件有两个主要原因。 

4fOlM"oM#O0a0若鄰博客7X1m2v)sO fe

首先是性能。 如果AllowOverride允许使用.htaccess文件, 则,Apache需要在每个目录中查找.htaccess文件,因此,无论是否真正用到, 允许使用.htaccess文件都会导致性能的下降。 另外,每次请求一个页面时,都需要读取.htaccess文件。 若鄰博客%Gn\*O5Ab RdXC

若鄰博客"M4W|\3H

还有,Apache必须在所有更高级的目录中查找.htaccess文件, 使所有有效的指令都起作用(参见how directives are applied.),所以, 如果有对/www/htdocs/example中页面的请求,Apache必须查找以下文件: 若鄰博客2pP,ZD^3b

若鄰博客&~].\Equ

/.htaccess 若鄰博客A&}8dRP
/www/.htaccess 若鄰博客nM^h&\;yw#P
/www/htdocs/.htaccess 若鄰博客j9p Kj*o.|'Zy)_
/www/htdocs/example/.htaccess 若鄰博客3A*i%rC-QUF

r4X VAO2qi1R~0而且,对此目录以外的每个文件访问,还有4个附加的文件系统访问,即使这些文件都不存在。 (注意,这可能仅仅发生在 / 允许使用.htaccess文件的情况下,虽然这种情况并不多。) 若鄰博客(c*J6rE1H{.`Z)^F

r_1e5w@2t0其次是安全。 如此,会允许用户修改服务器的配置,可能会导致未加限制的修改,请认真考虑是否给予用户这样的特权。 但是,如果给予用户较少的特权而不能满足其需要,则会带来额外的技术支持请求, 所以,必须明确地告诉用户已经给予他们的权限,说明AllowOverride设置的值, 并引导他们参阅相应的说明,以免日后许多麻烦。 若鄰博客G4a%V#f)wYhs

若鄰博客oh7tFYf

注意,在/www/htdocs/example目录下.htaccess文件中放置指令,与, 在主服务器配置文件中<Directory /www/htdocs/example>段中放置相同指令, 是等效的。: 

`e|d^+|0buZ0若鄰博客I%{d `%l\?S&Bv

/www/htdocs/example中的.htaccess: 
`dwm6p*]'^0/www/htdocs/example中.htaccess文件的内容 

!E+Km B v(k0若鄰博客HXJ6J3{/l6H'mr*LV(\ H

AddType text/example .exm 
O9pp4i-n7C&r0httpd.conf文件中的段 

[/k6G*Sl/la%Fq0若鄰博客g7\8j8a'X'SRq$p D9A)P

<Directory /www/htdocs/example> 若鄰博客+e#|U}r5c*C
AddType text/example .exm 
9p XROlA0</Directory> 若鄰博客To,ETg4V

%|*k]-nU0但是,把这个配置放置在服务器配置文件中则更加高效,因为只需要在Apache启动时读取一次, 而不是在有文件请求时每次都读取。 若鄰博客WU{\b%V D

若鄰博客8i(Y2wX9q)i_2a

将AllowOverride设置为"none"可以完全禁止使用.htaccess文件。 

*A8ET%FotCD0若鄰博客 w{1U B7Av+g

AllowOverride None 
do\*K#m Y4I {"\0top 若鄰博客0n8R&F9Gb
指令的生效 若鄰博客#Y C(HK K r(|.x

若鄰博客'a.`)O4HF

.htaccess文件中的配置指令作用于.htaccess文件所在的目录及其所有子目录, 但是,很重要需要记住的是,其更高级的目录也可能会有.htaccess文件, 而指令是按查找顺序依次生效,所以, 一个特定目录下的.htaccess文件中的指令可能会覆盖其更高级目录中的 .htaccess文件的指令,即, 子目录中的指令会覆盖更高级目录或者主服务器配置文件中的指令。 若鄰博客3eV"\1lC&` Y1P1]

若鄰博客C/XH9u8gpwI

例如: 

kD(b UiMq"N{%J"X k0若鄰博客t%fr'T-M(P2I4SU

目录/www/htdocs/example1中的.htaccess文件有如下内容: 若鄰博客 iy@q*A%k `

若鄰博客tspeN

Options +ExecCGI 

]g,D)D,F,P \O0若鄰博客4j5n M7k9i V7v'p(j

(注意: 必须设置"AllowOverride Options"以允许在.htaccess文件中使用 "Options"指令。) 

7tgx x'k4s;_8~%`T0

w)ve8mw&w#O3Vq0在目录/www/htdocs/example1/example2中的.htaccess文件有如下内容: 若鄰博客sH5c\dMz

!o}d2wnC"x0Options Includes 

%A:r,[h2] Q G s*pjq0

7eg"EXrS0由于第二个.htaccess文件的存在,/www/htdocs/example1/example2中 的CGI执行是不允许的,而只允许Options Includes,它完全覆盖了之前的设置。 若鄰博客~S q7~:AbPH
top 若鄰博客#v]8l MAxv-BOCu5^
认证举例 若鄰博客;X#q*TG/y;z~A*a

n'H0Y;?o6Dn0如果你为了知道如何认证,直接从这里开始看,有很重要的一点需要注意,有一种常见的误解, 认为实现密码认证必须要使用.htaccess文件,其实不是这样。 把认证指令放在主服务器配置文件的<Directory>段中,是一个更好的方法, 而.htaccess文件应该仅仅用于无权访问主服务器配置文件的时候。 参见上述的使用.htaccess文件的场合。 若鄰博客3T-Ak.L%k#q

:KibjG w0有此声明在先,如果你仍然需要使用.htaccess文件,请看以下说明。 若鄰博客`7mm(W[ e1?

若鄰博客.tso I4NF

必须设置"AllowOverride AuthConfig"以允许这些指令生效 若鄰博客:_HQ.kg

若鄰博客)o9}GnICs3P

.htaccess文件的内容: 

+A6D-Eu~.dY*TMR$u~e0若鄰博客.M-kAHo"G mZ

AuthType Basic 
$B!f*^(I6y0AuthName "Password Required" 若鄰博客*Ff#fT1q z6K ] F^
AuthUserFile /www/passwords/password.file 
SBXC9P%IP0AuthGroupFile /www/passwords/group.file 
ng/k#o8tY q+x0_a0Require Group admins 若鄰博客6mW7Va\3c Nb4j

"H"WoC Hyh!sh0注意,必须设置AllowOverride AuthConfig以允许这些指令生效 

^9U3T%VcF,NzZ0若鄰博客 Is*Q0q;@v:s g j

更详细的有关身份识别和认证的说明,请参见authentication tutorial。 
Y2O)`7J,D0B(s4Dbd0top 
C9`2~Fd-h.Y.~2a0服务器端包含举例 若鄰博客#{+EIG@-eCmXwK

若鄰博客.o/R*L B$Wzn

.htaccess文件的另一个常见用途是允许一个特定目录的服务器端包含(Server Side Includes), 可以在需要的目录中放置.htaccess文件,并如下配置: 

Ap3`/U |3K|4~ B0若鄰博客l1s1j]HW

Options +Includes 
c!X N&j"V0AddType text/html shtml 
:A qWbW(T&?0AddHandler server-parsed shtml 

c$xRt'q*uD,Z0若鄰博客wZm!KT8^4}6e7x

注意,必须同时设置AllowOverride Options和 AllowOverride FileInfo使这些指令生效。 若鄰博客#Oz*W:I._

^M2a0|"p0更详细的有关服务器端包含的说明,请参见SSI tutorial。 若鄰博客 S!`^OI z9YH U"p9@
top 
:z%qCUO7g-x M0CGI举例 若鄰博客([jK|l,p2l

若鄰博客@]ocKy@

最后,可以通过.htaccess文件允许在特定目录中执行CGI程序,需按如下配置: 

:oh9nvW0若鄰博客Z{#lX(e-O

Options +ExecCGI 
6h-xs Bah0AddHandler cgi-script. cgi pl 若鄰博客t#{ H*I2iu D2U

ZU^"L@5p!Jy0另外,如下,可以使给定目录下所有文件被视为CGI程序: 若鄰博客}b#~+G*Y#]6@

若鄰博客-r5h1O%k,q:w6? t aO

Options +ExecCGI 若鄰博客p(R&oZ|fMF
SetHandler cgi-script 

IO&Ykf4KcR0若鄰博客 h9swr t;kvw6U x/M

注意,必须设置AllowOverride Options使这些指令生效。 

@7p |j'Vez6ZD0

H#u[/~$UbK"g?9Sk,q0更详细的有关CGI编程和配置的说明,请参见CGI tutorial。 若鄰博客}(P%Z3h9A]p}8p
top 若鄰博客f/CT?8L;_OwBDp,f
疑难解答 若鄰博客0Q}(qj3y([Bj(D;O

'L.K&G NT%nU0如果在.htaccess文件中写入了配置指令但不起作用,可能有多种原因。 若鄰博客P`&c;G)x#]hG

若鄰博客8qAZ#x e6m

最常见的原因是,AllowOverride指令没有被正确设置, 必须确保没有对此文件区域设置AllowOverride None。有一个很好的测试方法,即, 在.htaccess文件随便增加点没用的内容,如果服务器没有返回了一个错误消息, 那么几乎可以断定设置了AllowOverride None。 

$oT;J,FX0

j`` P?C1sh9r0在访问文档时,如果收到服务器的出错消息,应该检查Apache的出错日志, 可以知道.htaccess文件中哪些指令是不允许使用的,也可能会发现需要纠正的语法错误。 

4h R5Y9vkl0

Q.FP {@"y{0
]N4AJ:KEvf0.htaccess文件使用手册 若鄰博客8@wN P;^rO t3Y rC

!r:?+iiYb|b0- .htaccess文件(或者"分布式配置文件"提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件,以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设置。 

;g+CtIta Gr0

0BMB:n(Uva ~0- 子目录中的指令会覆盖更高级目录或者主服务器配置文件中的指令。 若鄰博客XV#y+_:v

若鄰博客 Bq7u:t+c[

- .htaccess必须以ASCII模式上传,最好将其权限设置为644。 

7SO5|g/vU;m0

4\$gs:Mw;q+C0错误文档的定位 

0vNbvA5Zm){0

YW1uwv5OV(v1[0常用的客户端请求错误返回代码: 
9w)a#vVc~rg0401 Authorization Required 若鄰博客(H j8OE/\.O!F
403 Forbidden 
1h*|8?U%|^0404 Not Found 
b0JU\U u7m T}0405 Method Not Allowed 若鄰博客(Hs;K,KY"qq2T'O
408 Request Timed Out 
Ci6u~Vp7K]0411 Content Length Required 若鄰博客/Jq.c+J @0q@V?4f
412 Precondition Failed 若鄰博客vX*yM@
413 Request Entity Too Long 
T2E#d,^ d D}"_0414 Request URI Too Long 
%x)P w4Trs8b\6v9b0415 Unsupported Media Type 若鄰博客|GJ8g1N
常见的服务器错误返回代码: 若鄰博客QrQ0B,kX\!Gl/?g
500 Internal Server Error 

Om"f4Ois0

P$@K$cp!\'{0用户可以利用.htaccess指定自己事先制作好的错误提醒页面。一般情况下,人们可以专门设立一个目录,例如errors放置这些页面。然后再.htaccess中,加入如下的指令: 

-@/m\ }q0

%T7l eN0P os0ErrorDocument 404 /errors/notfound.html 若鄰博客'C+dK3m(y&A(p
ErrorDocument 500 /errors/internalerror.html 

xF&Z2b?6Al x0

kw[ k+R'S0一条指令一行。上述第一条指令的意思是对于404,也就是没有找到所需要的文档的时候得显示页面为/errors目录下的notfound.html页面。不难看出语法格式为: 

W q&Z7o9w;Uyq'q2}h0若鄰博客N/w5a%up$h

ErrorDocument 错误代码 /目录名/文件名.扩展名 若鄰博客N[9_y;{EB5S+?

f4x5Du4Uyn ? w3u0如果所需要提示的信息很少的话,不必专门制作页面,直接在指令中使用HTML号了,例如下面这个例子: 若鄰博客4]-hF`.H

SPc$e*Ox.A0ErrorDocument 401 "<body bgcolor=#ffffff><h1>你没有权限访问该页面,请放弃!</h1></body>" 

WB C-H.V5uW0

4eX hQ%voO'ia0文档访问的密码保护 若鄰博客kp y0E:S e)K$N v

若鄰博客zX}.f'j:OQ

要利用.htaccess对某个目录下的文档设定访问用户和对应的密码,首先要做的是生成一个.htpasswd的文本文档,例如: 若鄰博客 a h DL,T/|ma

S&?6DI u z-qXg(Bo0zheng:y4E7Ep8e7EYV 若鄰博客'J*?.O/X2OS }e~WS

若鄰博客 Lm/bx;F/TW

这里密码经过加密,用户可以自己找些工具将密码加密成.htaccess支持的编码。该文档最好不要放在www目录下,建议放在www根目录文档之外,这样更为安全些。 

kT!eu n)XV0若鄰博客fo2k,H"p&[E\

有了授权用户文档,可以在.htaccess中加入如下指令了: 若鄰博客 a0eGX*g

Z9U$YU t3X0AuthUserFile .htpasswd的服务器目录 若鄰博客 ?vdr aW A FM
AuthGroupFile /dev/null (需要授权访问的目录) 若鄰博客Xj;jLL'B
AuthName EnterPassword 若鄰博客5eEN*O9Y%OdCH f
AuthType Basic (授权类型) 若鄰博客1E&F7mx8]y

若鄰博客&^6PTftG*uh5M9Z#`Y.m^

require user wsabstract (允许访问的用户,如果希望表中所有用户都允许,可以使用 require valid-user) 

i;V4s(k$?Q0若鄰博客"p;vx!_(r#\;w&t{

注,括号部分为学习时候自己添加的注释 若鄰博客 MTs%rt7k"D

/PZ;lBi6EtG0拒绝来自某个IP的访问 若鄰博客bc/tb6i7M4`-M

-D6bxk9Zp6cY0如果我不想某个政府部门访问到我的站点的内容,那可以通过.htaccess中加入该部门的IP而将它们拒绝在外。 若鄰博客5b9aX\5m

若鄰博客,j4a"KuC

例如: 若鄰博客$t(Sr"LIX0l;Z

jVm5~"Sa^0
z6L j ZRk6u0order allow,deny 
u FF[Fhy0deny from 210.10.56.32 若鄰博客e:Ng:@zz.Uj3r
deny from 219.5.45. 若鄰博客)q1d oQqxo3B A
allow from all 

5s3X7n z1I8o w7n+du0

-oA/Yf$Y!b0第二行拒绝某个IP,第三行拒绝某个IP段,也就是219.5.45.0~219.2.45.255 

&Q)f-C(z|0若鄰博客a;RERt

想要拒绝所有人?用deny from all好了。不止用IP,也可以用域名来设定。 若鄰博客^+K;^B6w"[G0\p;w

Bm%h,w|FM0保护.htaccess文档 

K(I,{4?h8D { W5t0

;o9AC9Im\0在使用.htaccess来设置目录的密码保护时,它包含了密码文件的路径。从安全考虑,有必要把.htaccess也保护起来,不让别人看到其中的内容。虽然可以用其他方式做到这点,比如文档的权限。不过,.htaccess本身也能做到,只需加入如下的指令: 若鄰博客bSm5QG b5{

;YU7P$BD)R3tl9f0<Files .htaccess> 
k9n ti4];je:O0order allow,deny 若鄰博客o2?BAo
deny from all 若鄰博客.mVLD,gX2W i F?/g
</Files> 

({:rH*lX|o0

_Xlo5fy0URL转向 若鄰博客t(t)a,t_

!d]x}6A7rW C"Xr0我们可能对网站进行重新规划,将文档进行了迁移,或者更改了目录。这时候,来自搜索引擎或者其他网站链接过来的访问就可能出错。这种情况下,可以通过如下指令来完成旧的URL自动转向到新的地址: 

w2S$R;dYDj/T0

:vmXM8x9a_6Ron3?J0Redirect /旧目录/旧文档名 新文档的地址 

J?&Bs qLPX0

0T]ilHMO$s0或者整个目录的转向: 若鄰博客)j v6}2Z3yo?

&Vf4m;Eks4f0Redirect 旧目录 新目录 

8l E't$\*p6aAs _0若鄰博客6](A-z4E zLH`

改变缺省的首页文件 

dN&^,o7yt,Z0

_I'U nR0一般情况下缺省的首页文件名有default、index等。不过,有些时候目录中没有缺省文件,而是某个特定的文件名,比如在pmwiki中是pmwiki.php。这种情况下,要用户记住文件名来访问很麻烦。在.htaccess中可以轻易的设置新的缺省文件名: 若鄰博客@/Tr/? i

若鄰博客*vrpOQ.p`p{t

DirectoryIndex 新的缺省文件名 

*|:{M;H$s7L.Ch0

7X {p?-lW9M,J*P0也可以列出多个,顺序表明它们之间的优先级别,例如: 若鄰博客!x X_ ?"oGE3T

6f@Uv.G\e0DirectoryIndex filename.html index.cgi index.pl default.htm 

[io2f}]6E\Y0若鄰博客/Exb X4Xv^| ~

防止盗链 若鄰博客Xc8b]4Nt)B

/V;VUg(`,B7s%q(Y0如果不喜欢别人在他们的网页上连接自己的图片、文档的话,也可以通过htaccess的指令来做到。 

+l1i'b#T`O3RI0

5wZ3?hF2{0所需要的指令如下: 

u*M|FG:}yL8J0

!D%k"HZ%C:c#u-q^0RewriteEngine on 
P V VM5ml D+m n.N0RewriteCond % !^$ 
;\ s}L!@]!fwd0RewriteCond % !^[url]http://(www/.)?mydomain.com/.[/url]*$ [NC] 若鄰博客 aI4ZO8K%V*yp
RewriteRule \.(gif|jpg)$ - [F] 

$k*V5Dm!aak0

U6spk,Q^V4V0如果觉得让别人的页面开个天窗不好看,那可以用一张图片来代替: 若鄰博客c7j_ Ps

-u3{@Lz6P5Mk_0RewriteEngine on 
^[.q]m{X0RewriteCond % !^$ 
'aKu:i5w;UY1o$F0RewriteCond % !^[url]http://(www/.)?mydomain.com/.[/url]*$ [NC] 若鄰博客*fz!B8T7s*_`%j,X
RewriteRule \.(gif|jpg)$ [url]http://www.mydomain.com/[/url]替代图片文件名 [R,L]

a'bq WF%v`u]0

%v1X+P BAP0
-I%zKKsW0- .htaccess文件(或者"分布式配置文件"提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设置。 

Wz(k6_+gS`;k"Ih1AT}!|%n0

?O }?c qv0- 子目录中的指令会覆盖更高级目录或者主服务器配置文件中的指令。 

nxF5q#KI1a0

-cs F SH0- .htaccess必须以ASCII模式上传,最好将其权限设置为644。 

(^&sV;^ u8v0u,?0

P,Yz~ ?0错误文档的定位 

2E-l t|y{0l&v0若鄰博客lN`1m:I o6L$P

常用的客户端请求错误返回代码: 
Gf5@x$_o0401 Authorization Required 若鄰博客tL*s:h0y*L vgJ
403 Forbidden 
'C0NZ6a.P,D0404 Not Found 
]]*_4Z2V T z0405 Method Not Allowed 
v(Un)x"pp9b0408 Request Timed Out 
a_ w+Ny3WA(N-^9m0411 Content Length Required 
x-s H k0d9Lp!vo+c?y {K0412 Precondition Failed 
j9K7yU!F:?6`0413 Request Entity Too Long 
J nGam ov5H0414 Request URI Too Long 若鄰博客1_t9G%[7A B0j*dB_
415 Unsupported Media Type 
r/yj`-U.f}5U0常见的服务器错误返回代码: 
p^Kh(J ckeIHypyJ0500 Internal Server Error 若鄰博客:l:Jzol.D"gB

0s&cP+~[9v-b4R0用户可以利用.htaccess指定自己事先制作好的错误提醒页面。一般情况下,人们可以专门设立一个目录,例如errors放置这些页面。然后再.htaccess中,加入如下的指令: 

7d&I KV,XV|.n0

"TF3\ e8E*V0ErrorDocument 404 /errors/notfound.html 若鄰博客 {5^(XE Wnw2J d
ErrorDocument 500 /errors/internalerror.html 若鄰博客#YEHX z4sQ2D

若鄰博客F9HH1Lw\

一条指令一行。上述第一条指令的意思是对于404,也就是没有找到所需要的文档的时候得显示页面为/errors目录下的notfound.html页面。不难看出语法格式为: 若鄰博客&_0w3fc$E |$vt.N C

XPf(fj3q~0ErrorDocument 错误代码 /目录名/文件名.扩展名 若鄰博客@%{)X};sy

若鄰博客 e?K6H4`%YZK(]

如果所需要提示的信息很少的话,不必专门制作页面,直接在指令中使用HTML号了,例如下面这个例子: 若鄰博客K0D{%P:s/F#_-M

若鄰博客[,S/PRg$Viw

ErrorDocument 401 "<body bgcolor=#ffffff><h1>你没有权限访问该页面,请放弃!</h1></body>" 

;X)Gw*G;F|0

s"\&xZ$u-y6YO&d'M _b0文档访问的密码保护 

Y&b#rFckQ{0

'D6m"HHCC0~9?0要利用.htaccess对某个目录下的文档设定访问用户和对应的密码,首先要做的是生成一个.htpasswd的文本文档,例如: 

G9D l4UA#A A\0

~a6`/|d0Ftp@5s0zheng:y4E7Ep8e7EYV 

(pcj0a"T8sN0若鄰博客)kl3u!V_.i;z

这里密码经过加密,用户可以自己找些工具将密码加密成.htaccess支持的编码。该文档最好不要放在www目录下,建议放在www根目录文档之外,这样更为安全些。 

}4{C-B}D6z2J0

:aJz*srQ0有了授权用户文档,可以在.htaccess中加入如下指令了: 若鄰博客G ~1k[q

若鄰博客AG"|w:c%_pd9h

AuthUserFile .htpasswd的服务器目录 
P#z$W:r.X8i@&J0AuthGroupFile /dev/null (需要授权访问的目录) 若鄰博客9k `7hv \{ F
AuthName EnterPassword 
E,t"i%W}G8J t0AuthType Basic (授权类型) 若鄰博客 K whQ^-k-r1k

若鄰博客J ?y7X@*r jz!\,W

require user wsabstract (允许访问的用户,如果希望表中所有用户都允许,可以使用 require valid-user) 

dG/E`7q:d,wN_0若鄰博客B;Q ?5VN6I#T-D

注,括号部分为学习时候自己添加的注释 若鄰博客+@c]M}MJ L&ZX

若鄰博客J2X:Sh9ek

拒绝来自某个IP的访问 若鄰博客3i,Nw2Ru]RQ

KW*l~asZ0如果我不想某个政府部门访问到我的站点的内容,那可以通过.htaccess中加入该部门的IP而将它们拒绝在外。 若鄰博客LbG x_9| Z

"c3SlYj*@D0例如: 若鄰博客Mr _L1Z:sj]

若鄰博客Y'['f2m av A


_p G_#P(Wb-M'g wp0D0order allow,deny 若鄰博客6e k4Kn`z-S
deny from 210.10.56.32 
]#\FRy0deny from 219.5.45. 若鄰博客S _zC]%X4|
allow from all 

wKR \:kn`{9|K0若鄰博客u ~,pU&q9mL,v*a

第二行拒绝某个IP,第三行拒绝某个IP段,也就是219.5.45.0~219.2.45.255 若鄰博客YS;h@9[S \

3sE2V0C0GM,[c|,r0想要拒绝所有人?用deny from all好了。不止用IP,也可以用域名来设定。 若鄰博客+P A$y|jk2p)IE G

X O%l'w&enwg2x0保护.htaccess文档 若鄰博客u&F{J}r0W FXRNo

若鄰博客_Zv6M ep8y

在使用.htaccess来设置目录的密码保护时,它包含了密码文件的路径。从安全考虑,有必要把.htaccess也保护起来,不让别人看到其中的内容。虽然可以用其他方式做到这点,比如文档的权限。不过,.htaccess本身也能做到,只需加入如下的指令: 

8b*N+_5\/W6d`%c0

h yeHW.w)M0<Files .htaccess> 若鄰博客}jVd$fr"~#W
order allow,deny 
^9NO#fV%}@*H0deny from all 
^:k5u w@0</Files> 

\ q;p2F ga\4E0若鄰博客8Si8Ky C {-z5C V

URL转向 若鄰博客c7^e5S#Dgu8r4T

.T*\e k!f4A0~0我们可能对网站进行重新规划,将文档进行了迁移,或者更改了目录。这时候,来自搜索引擎或者其他网站链接过来的访问就可能出错。这种情况下,可以通过如下指令来完成旧的URL自动转向到新的地址: 

!NWS0r&f]-z,fxq4Z,s0

4f2Mi1uJ0S0Redirect /旧目录/旧文档名 新文档的地址 若鄰博客v!?J,I:l G

若鄰博客 W`0V K{1u-r

或者整个目录的转向: 

U H*C%}"k!o nL0若鄰博客?e}b%l-lH

Redirect 旧目录 新目录 

2a*?y0[7f:Z cA1YR/|0

|*?9o}R9L`0改变缺省的首页文件 

$OtW#H@,h6G q,q0

ba"L-ODo^ J4~9c0一般情况下缺省的首页文件名有default、index等。不过,有些时候目录中没有缺省文件,而是某个特定的文件名,比如在pmwiki中是pmwiki.php。这种情况下,要用户记住文件名来访问很麻烦。在.htaccess中可以轻易的设置新的缺省文件名: 若鄰博客q/KHb7qK mE

4k3r$JDB(r@9[Y(LD0DirectoryIndex 新的缺省文件名 若鄰博客WK;B+t }*z!J D%cX

若鄰博客|ouVm4|

也可以列出多个,顺序表明它们之间的优先级别,例如: 

$Td0Ad&a0若鄰博客%l%K/W%l0e dzB$E!X

DirectoryIndex filename.html index.cgi index.pl default.htm 

2[*k[I#@QP|0若鄰博客C O ` J[4z8s"L

防止盗链 

n)c%p+U]%v0若鄰博客6M Ew9Bi$H*GS

如果不喜欢别人在他们的网页上连接自己的图片、文档的话,也可以通过htaccess的指令来做到。 

4kB(Q`(s8S0若鄰博客a Dah y?'x-p

所需要的指令如下: 若鄰博客b)c4X*Y)e_$I

若鄰博客 Kb3NJ~VGW

RewriteEngine on 
}-ig ~f1w D _0RewriteCond % !^$ 若鄰博客.kbW!M6vma
RewriteCond % !^[url]http://(www/.)?mydomain.com/.[/url]*$ [NC] 
-W-WL8A4X1w0RewriteRule \.(gif|jpg)$ - [F] 若鄰博客0i } H0]9L%CtQ

lT;f9A*B,t,C0如果觉得让别人的页面开个天窗不好看,那可以用一张图片来代替: 

Fq'Z:Z\4xo K-P0若鄰博客;ndiT$G4~~z

RewriteEngine on 若鄰博客:S?4WU)e
RewriteCond % !^$ 若鄰博客#U7n\xd/W:f
RewriteCond % !^[url]http://(www/.)?mydomain.com/.[/url]*$ [NC] 若鄰博客2|V(g m,uN
RewriteRule \.(gif|jpg)$ [url]http://www.mydomain.com/[/url]替代图片文件名 [R,L] 

#Jq"]L-[u{T5Y4F0

#VRy n dOf)I)M0一. 自定义404,401,等错误 
4P8BA2OM)C2Y01.若鄰博客%oZ`9@wW
首先建立一个名为: .htaccess 
.NA_;AV$o0写入以下内容 若鄰博客? \ tH5Uw*[+w
ErrorDocument 401 /err401.html 
(nw ~ s3Tu|0ErrorDocument 402 /err402.html 
N%T0se/k0isqU0ErrorDocument 403 /err403.html 
H_3n!S`b oO*h-S0ErrorDocument 404 /err404.html 

[,K5Ek+JG2z0若鄰博客 Br'N)Y0r2C z{(~G

其中,401,402,403,404代表错误类型, 若鄰博客DjxIKp:J
后面的err401.html代表其相对应的页面, 若鄰博客 iC[4y$?6R!HM)s,l

若鄰博客;XPM)M~P

2.若鄰博客1Nr0T ~9h-y/aY
分别建立名字为: 
Q%J:LX'p$m%q%N;I5P0err401.html,err402.html......... 若鄰博客d'JuD%Szw8Z9R9Y%?
的文件,当出现对应的错误的时候, 
7bh,^od0就会指向对面的页面 若鄰博客8f3p*F&g0Ve+jW$E&U

若鄰博客kJhK N1[Ci

3.若鄰博客-wWC$R*`?(Q;j
传到根目录下, 若鄰博客r|mB]*`|l
也就是 public_html 目录下 若鄰博客4cU!AodL$P`
一切就OK了若鄰博客mY#MVi? [6M

若鄰博客Pf&s#R7DSi r5c0^!}


KO6e2Ed\D6b+AY0二. 去掉广告
sV!Is~0[0建个文件名 .htaccess 的文件, 文件内容如下: 若鄰博客,I/L Myuo[9A1~!k-WK
LayoutIgnoreURI *.php 若鄰博客 tq#|3C*Hdc4|-n
LayoutIgnoreURI *.cgi 
g+r)h7A)KB+~o}0LayoutIgnoreURI *.htm 若鄰博客@ YZ#Hz&o!q#h
LayoutIgnoreURI *.html 

0bqda9U Z0hS0若鄰博客 F!]*Szr,z

将 .htaccess 上传至空间的 Public_html 目录下,即可去掉广告! 

`%UvI5h Mb0]t%f!K0

oBGH)k&T*OZ0注意 *.* 这里..想去那种扩展名的文件,就写上那种文件的扩展名! 
'X2Ikp*T+v0这个是最简单的方法,只要在根目录加这个文件,那么整个网站都不会有广告!

,OM X H M(y A9D0

TAG: htaccess php apache

 

評分:0

我來說兩句

顯示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

我的欄目

日曆

« 2008-12-02  
 123456
78910111213
14151617181920
21222324252627
28293031   

數據統計

  • 訪問量: 486
  • 日誌數: 40
  • 建立時間: 2008-04-02
  • 更新時間: 2008-08-01

RSS訂閱

Open Toolbar