标题: .htaccess文件使用教程[转贴] [打印本页]
作者: adicom 时间: 2007-11-16 02:40 PM 标题: .htaccess文件使用教程[转贴]
PS:全文系转帖
i*c_`]^y'u obXX^R
1.1 什么是.htaccess文件
;l!KxZB"KCyAweb.meyu.net.从本指南中,你将可以学习到有关.htaccess文件及其功能的知识,并用以优化你的网站。尽管.htaccess只是一个文件,但它可以更改服务器的设置,允许你做许多不同的事情,最流行的功能是您可以创建自定义的“404 error”页面。.htaccess 并不难于使用,归根结底,它只是在一个text文档中添加几条简单的指令而已。
D1`ki{*Q3L?web.meyu.net.
5g^U Y^K#Q9GE首先你要判断主机支持它
ZP#J2y`U6~)[I:x$Cd1SZ0cY
这可能很难用简单的答案来回答。许多主机支持.htaccess,但实际上并不会特别声明,许多其他类型的主机有能力但并不允许他们的用户使用. htaccess。一般来说,如果你的主机使用Unix或Linux系统,或任何版本的Apache网络服务器,从理论上都是支持.htaccess的,尽管你的主机服务商可能不允许你使用它。梦游时光互联E4hR$mKP3U7a4~W(P
,L1R&V-iwmb E
t
判断你的主机是否允许.htaccess,一个标志很好的是它是否支持文件夹密码保护。为达到此功能,主机服务商需要使用.htaccess(当然,少数情况下他们虽提供密码保护功能,但却并不允许你使用.htaccess)。如果你不确定自己的主机是否支持.htaccess,最好的办法是上传你自己的.htaccess文件看看是否有用,或者直接发送e-mail向你的主机服务商咨询。$qK;O7kN'Q
,}`|ll'|$XApache系统中的.htaccess文件(或者”分布式配置文件”提供了针对目录改变配置的方法,即,在一个特定的文档目录中放置一个包含一个或多个指令的文件,以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设置。
@1CY^FB?
-sfT~s%m8x:I子目录中的指令会覆盖更高级目录或者主服务器配置文件中的指令。)j6`3LT`5GX
0j0aaJg6yl,NW.htaccess必须以ASCII模式上传,最好将其权限设置为644。
%g1NGJXweb.meyu.net.
'W1P'[]~'m9b"N.htaccess可以做大量的事情,包括:文件夹密码保护、用户自动重定向、自定义错误页面、改变你的文件扩展名、封禁特定IP地址的用户、只允许特定IP地址的用户、禁止目录列表,以及使用其他文件作为index文件。
N3wt6T@-^
Z9Opu B8U7s J6Zweb.meyu.net.
"z
[+o(UZp梦游时光互联1.2 如何创建.httaccess文件
zWhj|i}梦游时光互联创建.htaccess文件也许会给你带来一些困难。写文件很容易,你只需要在文字编缉器(例如:写字板)里写下适当的代码。真正困难的可能是文件的保存,因为.htaccess是一个古怪的文件名(它事实上没有文件名,只有一个由8个字母组成的扩展名),而在一些系统(如windows 3.1)中无法接受这样的文件名。在大多数的操作系统中,你需要做的是将文档保存成名为:“.htaccess” (包括引号)。如果这也不行,你需要将其先命名为其它名字(例如htaccess.txt),再将其上传到服务器上,之后直接使用FTP软件来重命名。M'\ D(EM
web.meyu.net.1F+Y)X0N&Hk*h
警告
"_I0sy0g%|ffv'?0lv8p$c
S;g%qRo
在使用.htaccess之前,我必须给你一些警告。虽然在服务器上使用.htaccess绝对不太可能给你带来任何麻烦(如果有些东西错了,它只是没效用罢了),但如果你使用Microsoft FrontPage Extensions,就必须特别小心。因为FrontPage Extensions本身使用了.htaccess,因此你不能编辑它并加入你自己的信息。如果确实有这方面的需要(并不推荐,但是可能),你应该先从服务器上下载.htaccess文档(如果存在),之后在前面加上你的代码。F-`y%xZ
梦游时光互联` oNn4}-_
2|.httacces文件的配置 8m tx&U$Q2u
vDZ#oEo_f1B't^\pG&adh$L;}
2.1.配置.htaccess 自定义错误页
Zz4}9o1T._^P我要介绍的.htaccess的第一个应用是自定义错误页面,这将使你可以拥有自己的、个性化的错误页面(例如找不到文件时),而不是你的服务商提供的错误页或没有任何页面。这会让你的网站在出错的时候看上去更专业。你还可以利用脚本程序在发生错误的时候通知你(例如我使用Free Webmaster Help的PHP脚本程序,当找不到页面的时候自动e-mail给我)。
%_XKBM @3g
m3?L6Np;mmWH你所知道的任何页面错误代码(像404找不到页面),都可以通过在.htaccess文件里加入下面的文字将其变成自定义页面:
k3N,z/~8Wem x
"D3q.D6Y2N+}en4A ErrorDocument errornumber /file.html:[F rke
z U4A ]6lP(nl梦游时光互联举例来说,如果我的根目录下有一个nofound.html文件,我想使用它作为404 error的页面:web.meyu.net.6{7Q0~i
}+u
梦游时光互联A(M&Dk"E N e
ErrorDocument 404 /notfound.html
7L3Iu(mfC/]4Rwweb.meyu.net.zC:kk \~y
如果文件不在网站的根目录下,你只需要把路径设置为:
Q,p i8|+\
Z` A@?v:Zn&J^v D
ErrorDocument 500 /errorpages/500.html
3d5W$dV W4i4cRx{%J+R%A-m|^xg
以下是一些最常用的错误:梦游时光互联 _$d#FX7W
} J;~C
?A#mt8b-Bweb.meyu.net.常用的客户端请求错误返回代码:SmWXe ?{A _+wN
j#_g4@%odX400 - Bad request 错误请求
].^ Q+r$~x401 Authorization Required需要验证
7\?-d0VO403 Forbidden禁止
cCp:E"iI1b梦游时光互联404 Not Found找不到页面
&nn
x}$w F/S)eq(B405 Method Not Allowed梦游时光互联}M
o$t_,Opz
408 Request Timed Out
~;j'D1b!o]-`[%Cweb.meyu.net.411 Content Length Required
J9g1p sc%E412 Precondition Failed
Fc:GNl+V4] w413 Request Entity Too Longweb.meyu.net.x4v'oMSCH
414 Request URI Too Long
3[\&r0`\{jR_415 Unsupported Media Typek3zR$x-W3|4y']
梦游时光互联CZ+?
bA'G
常见的服务器错误返回代码:v){C5ygk u*_
c"e.}z1u`-A 500 Internal Server Error内部服务器错误
P1qW\v4Z7m&?&f5HLI`)dEcs
接下来,你要做的只是创建一个错误发生时显示的文件,然后把它们和.htaccess一起上传。h$T.a)kvy
]#zV(O2@
cea.O9d*@D梦游时光互联用户可以利用.htaccess指定自己事先制作好的错误提醒页面。一般情况下,人们可以专门设立一个目录,例如errors放置这些页面。然后再.htaccess中,加入如下的指令:
3StI R`*jCK^*_2ipHzxu:~
ErrorDocument 404 /errors/notfound.htmlweb.meyu.net. j'X~(F6JC
ErrorDocument 500 /errors/internalerror.htmlweb.meyu.net. Bv#Nu.Zl.L|
2\*dbB ^;m(R
一条指令一行。上述第一条指令的意思是对于404,也就是没有找到所需要的文档的时候得显示页面为/errors目录下的notfound.html页面。不难看出语法格式为:
MiZ4w8b P#B梦游时光互联
0O"Oi^&XdgV ErrorDocument 错误代码 /目录名/文件名.扩展名@D7g5y
z%H:A y
-t
H6x+q%} R5C如果所需要提示的信息很少的话,不必专门制作页面,直接在指令中使用HTML号了,例如下面这个例子:web.meyu.net.EcaJ0N @r%X
web.meyu.net.L["\S%r5ij-b
ErrorDocument 401 “你没有权限访问该页面,请放弃!”8Qk}(g.i};Qk'j
2|j o5PM+? A
梦游时光互联~+C MW I
} v@-a
2.2.配置.htaccess 停示显示目录列表
MalX `Z5iV有些时候,由于某种原因,你的目录里没有index文件,这意味着当有人在浏览器地址栏键入了该目录的路径,该目录下所有的文件都会显示出来,这会给你的网站留下安全隐患。
J_;O;^:ew_"r H'FO5@web.meyu.net.*R&T!JaqLE5S
为避免这种情况(而不必创建一堆的新index文件),你可以在你的.htaccess文档中键入以下命令,用以阻止目录列表的显示: Options -Indexes
7y6t!Yuj'\*ru1s U-Mweb.meyu.net.
WIB,v1g
\*?k1_dJD!P2.3.配置.htaccess 阻止/允许特定的IP地址Qc0Sw aWty\
某些情况下,你可能只想允许某些特定IP的用户可以访问你的网站(例如:只允许使用特定ISP的用户进入某个目录),或者想封禁某些特定的IP地址(例如:将低级用户隔离于你的信息版面外)。当然,这只在你知道你想拦截的IP地址时才有用,然而现在网上的大多数用户都使用动态IP地址,所以这并不是限制使用的常用方法。web.meyu.net.2jH9vPw6]a
wJT i
d/^4v)mj:Z
^:C8p;H你可以使用以下命令封禁一个IP地址:
]5Q6N,Nd9B
U|梦游时光互联 IVNiT+Sj9q
deny from 000.000.000.000
5o3rvEW'^E,|
P
E)]${*F1c'w5e%vweb.meyu.net.这里的000.000.000.000是被封禁的IP地址,如果你只指明了其中的几个,则可以封禁整个网段的地址。如你输入210.10.56.,则将封禁210.10.56.0~210.10.56.255的所有IP地址。
Q/T;jH Y2TC"y5d_web.meyu.net.1Jq5W5p$Z HyaS
你可以使用以下命令允许一个IP地址访问网站:
C+Q[8W8Mkj`0V{NQ_&t
G#w8L
allow from 000.000.000.000
Wn2NNZzweb.meyu.net.
vogl8j梦游时光互联被允许的IP地址则为000.000.000.000,你可以象封禁IP地址一样封禁整个网段。
`
b9Fw\6J,vriw%m8_A~q
如果你想阻止所有人访问该目录,则可以使用:
rjp?Z5}(ieJweb.meyu.net.
qcYYY Z[qH deny from all
EN$hTA1Vc
C
Vh
FV!Uvhg不过这并不影响脚本程序使用这个目录下的文档。
y9bQ S5Vc+F梦游时光互联
#r0J[MV#]^%o Zz:a/cU
2.4.配置.htaccess 替换index文件w;p(Z0JS zM
改变缺省的首页文件
l4t
R1xWjT\.oN]'DkN(?
一般情况下缺省的首页文件名有default、index等。不过,有些时候目录中没有缺省文件,而是某个特定的文件名,比如在w3sky中是 w3sky.PHP。这种情况下,要用户记住文件名来访问很麻烦。在.htaccess中可以轻易的设置新的缺省文件名:cEI}0y&^Eg(x
t(oV aN|
DirectoryIndex 新的缺省文件名/l [HW8v0v@!{T:iv
"GicB#SN gNYyv(}
也可以列出多个,顺序表明它们之间的优先级别,例如:DK)s$zN-C#]*Qo
u
$z*Nq
qH%O)hS
DirectoryIndex filename.html index.cgi index.pl default.htm[-?B1S3^%gwk_u
梦游时光互联PWko_*ZVJ)X}7B~
也许你不想一直使用index.htm或index.html作为目录的索引文件。举例来说,如果你的站点使用PHP文件,你可能会想使用 index.PHP来作为该目录的索引文档。当然也不必局限于“index”文档,如果你愿意,使用.htaccess你甚至能够设置 foofoo.balh来作为你的索引文档!梦游时光互联IXy
C%L$g;h
\&TZ]N
这些互为替换的索引文件可以排成一个列表,服务器会从左至右进行寻找,检查哪个文档在真实的目录中存在。如果一个也找不到,它将会把目录列表显示出来(除非你已经关闭了显示目录文件列表)。Zb[
Pjq
A4qJ-h.f
{&Y``aZ!k|6w
os DirectoryIndex index.PHP index.PHP3 messagebrd.pl index.html index.htm
N/F#u@6Kkweb.meyu.net.&T!M:v&s:D&h2J1CE7u
4\VQ8s&kS1Zweb.meyu.net.2.5.配置.htaccess 重定向页面'M6dn E4_
.htaccess最有用的功能之一就是将请求重定向到同站内或站外的不同文档。这在你改变了一个文件名称,但仍然想让用户用旧地址访问到它时,变的极为有用。另一个应用(我发现的很有用的)是重定向到一个长URL,例如在我的时事通讯中,我可以使用一个很简短的URL来指向我的会员链接。以下是一个重定向文件的例子:
MV-s;Nq{G梦游时光互联
#m%kz`doP梦游时光互联 Redirect /location/from/root/file.extweb.meyu.net.
e6n RCP'zQ!a%v(g
http://www.w3sky.com/new/file/123.html
6\gAZ0r:S1l Ur梦游时光互联
RN4`5Z8Zj0T'T上述例子中,访问在root目录下的名为oldfile.html可以键入:3YjO}*O j5p4eJe|5X
3@xzN)g dm;{ /oldfile.html
sd6d;iWtweb.meyu.net.
7t)z&_kQ8nweb.meyu.net.访问一个旧次级目录中的文件可以键入:梦游时光互联
m,BTu:k%BYB X
$~fT%z5^)u0Q N梦游时光互联 /old/oldfile.html.d-Y
|%x;w'fu
[
B4~^X e
你也可以使用.htaccess重定向整个网站的目录。假如你的网站上有一个名为olddirectory的目录,并且你已经在一个新网站 http://www.w3sky.com/newdirectory/上建立了与上相同的文档,你可以将旧目录下所有的文件做一次重定向而不必一一声明:
hf:?4q!S
y$_UI*x梦游时光互联K n!qR9z?*`"L0R
Redirect /olddirectory http://www.w3sky.com/newdirectory#tCt![\+G_
(G:K;m0KWV.M
这样,任何指向到站点中/olddirectory目录的请求都将被重新指向新的站点,包括附加的额外URL信息。例如有人键入:pFgE&D6}4mWU3s1u
@BR {8s{2j\I OSm-P7_
Kdt0q
4xDj'J'~jY
请求将被重定向到:
0h x|f!Mb+J/}
5B?"I0NNZ
v}c 梦游时光互联*g!h"e{EJ6[
-n8L&oy]?ir^-d0o如果正确使用,此功能将极其强大。Yab.y
Vo+J
xl6GZ!R/D我们可能对网站进行重新规划,将文档进行了迁移,或者更改了目录。这时候,来自搜索引擎或者其他网站链接过来的访问就可能出错。这种情况下,可以通过如下指令来完成旧的URL自动转向到新的地址:
0OO+H U I1Aq%__梦游时光互联梦游时光互联nPY ZmRw
Redirect /旧目录/旧文档名 新文档的地址
0Ce;@ N1y"X
n j4P$J)iFp梦游时光互联或者整个目录的转向:web.meyu.net.*d0Ct1[g;MwF
%ZhX bE:s Redirect 旧目录 新目录梦游时光互联3UE[r/Wz-Q:AE0{
K c]_xA]O1q3nRxcX9O[&r
t8Rs*P$M2eZ^U[)r7\
g7k2s
q
超过字节限制了 下续
作者: adicom 时间: 2007-11-16 02:40 PM
3.1.密码保护的.htaccess文件
]%KKt4c NCN尽管有各种各样的.htaccess用法,但至今最流行的也可能是最有用的做法是将其用于网站目录可靠的密码保护。尽管JavaScrip等也能做到,但只有.htaccess具有完美的安全性(即访问者必须知晓密码才可以访问目录,并且绝无“后门”可走)。
} [)QI8fP&A7d
e+\;g6lo)s#R/C利用.htaccess将一个目录加上密码保护分两个步骤。第一步是在你的.htaccess文档里加上适当的几行代码,再将.htaccess文档放进你要保护的目录下:
9Q7ezQ7x|
t
}/{1z;ZA-P,Ht+f8u AuthName “Section Name”2}.c5q6BLW;WC
AuthType Basic
t2W_
`9L'tKyU AuthUserFile /full/path/to/.htpasswd9u|-?'@[@
Require valid-user