[Linux] [轉貼]Apache 網頁認證.htaccess 設定方法
' v' E/ d* X/ @1 Y) V
4 v, ^( |2 G' x.htaccess
& Y y9 I: s. q: _3 L/ T
.htaccess 可放在任何一網頁目錄內,當該目錄在 httpd.conf 設定不是 AllowOverride None 便可使用 .htaccess 的功能了,而設定作 AllowOverride All 更可使用 .htaccess 的所有功能了
2 G1 O' ~4 Y2 i& l
.htaccess 可用作對該目錄及其子目錄進行取存控制,而不用修改 httpd.conf 及不用重新啟動伺服器軟件
; j. T! E% j2 U2 j--------------------------------------------------------------------------------
- V- H2 C4 j" m! n: ehttpd.conf 的設定
3 l' L0 X7 d. `0 Q
加上或取消註解 (#) ]定改成 AllowOverride All
+ Y9 f5 w' h* y7 y- ~$ J6 Z然後儲存及重新啟動伺服器軟件
! k: g8 V* Q4 N# \) z" M& w--------------------------------------------------------------------------------
0 b! S2 g' I. r. V) @7 R
.htaccess 的用法
7 F+ S5 w" H. A# L) l S- Z
先把 .htaccess 放在要用的目錄內 (Windows 系統內不可以直接把檔案改名作 .htaccess ,需用間接的方法,如在指令模式下 ren filename.txt .htaccess 或用 FTP 軟件修改該檔名)
: n% Y9 h% X5 V8 U
用法:
. _. w) i; z! i3 e: }% G( r3 _
1. 密碼保護
- ^1 S4 A' l7 _4 P, H; |" k# W.htaccess 內寫上:
; R( C& `& O: ~; Z1 c- r. j+ h
AuthName "testing"
8 z& t8 x+ H) r( UAuthType Basic
: v. h6 l+ l3 p7 P: o, s
AuthUserFile "C:/Apache/htdocs/testing/.htpasswd"
0 ^% ^ f7 j9 Z+ f
require valid-user
, F4 c' ^# s( l; ]' _' o: qAuthName 是當你進入密碼保護時,瀏覽器出現的說明
7 u& N( l, ^6 p( t" P
AuthUserFile "C:/Apache/htdocs/testing/.htpasswd" 是密碼檔案的位置
) U9 L# K0 G9 p1 l2 J. P$ n密碼檔案 (.htpasswd) 內寫上:
' n3 G7 Z5 f" W9 t) H. e
user1:password1
% A; X9 k- n0 V
user2:password2
* X! P2 F3 J& k1 [( f+ K: L4 C5 ^# f但密碼不應直接寫上,即是如果有一使用者是 test ,密碼是 password ,先用 C:\Apache\bin 內的 htpasswd.exe 把密碼加密,用法如下] require group group1 ,因此只有 group1 的使用者可通過,即 john , peter 及 david
0 V( `: m. N0 K# J6 `. n5 i# h0 r
( {9 D$ X' l+ u8 I' K
2. 自設錯誤報告文件
# J+ r6 ?. j8 G. S.htaccess 內寫上:
! f0 K; N. R# l- }8 |+ ?9 F H' _
ErrorDocument 404 /404.html
" k9 H/ H3 L& ]/ H+ S
如果找不到網頁時,便輸出 404.html 的內容,其他錯誤時做法亦然,如:
$ e9 {# `$ c+ L6 R; c4 dErrorDocument 404 "<html><body>找不到網頁</body></html>
% P! t+ D) p6 y) { s7 V7 LErrorDocument 500 /500.html
?6 x4 n8 |5 W m3 u5 h
+ z0 d! S1 j1 W5 T6 O5 D% R4 V3. 自設首頁檔案
" Z8 ^: S1 E# x; v' l
.htaccess 內寫上:
( C8 e# `0 |% W7 v. |+ o
DirectoryIndex a.html
" G4 b& }$ h8 V9 r& G首頁檔案便是 a.html 了
8 } E% y ]# R7 P( S& I q5 \( _' G3 \7 U
4. 禁止讀取檔案
( a2 D |- p9 v4 f.htaccess 內寫上:
" V. D a6 ]: t* j
<Files secret.html>
" C6 T# D6 w1 x8 torder allow,deny
0 d N6 ?3 Y/ H8 B
deny from all
1 G; v: s# c1 U" W$ Q6 E; N2 h: I9 ^
</Files>
" J4 l! R+ C# a* b2 @3 F
deny from all 即所有人皆不能讀取 sercet.html
% B% |) j+ F v+ H3 ]- n B$ v. C( m# x9 Y) P
而 Apache 1.3 以後的版本,更可以用支援 regular expression 的 filesmatch
4 c: D! N2 F8 A$ z6 j) y" [1 d
.htaccess 內寫上:
& \9 B6 x: R: G" D+ _. n. v9 ~" I<filesmatch "\.jpg">
4 }: a" J; `# \
order allow,deny
6 P2 S5 r( T% x+ ^* N
deny from all
8 \% Z) N# f" d" c9 G4 x3 [ {</filesmatch>
: m5 U' a+ G+ H) T. k$ Q5 t. W! ^
即所有人皆不能讀取副檔名為 .jpg 的檔案
. T; b! S+ p! c* T4 j, G( Z2 J! ?; p/ R7 `. Z! O. m
.htaccess 內寫上:
( X, o/ @$ O; Y: ~& ~
<Files secret.html>
! Q K/ |7 I- Z( f4 S' c/ D" |
order allow,deny
L9 U$ }% O# c/ {9 \. f" d) W% qallow form all
) u* Y6 p1 k* C; p2 K: O
deny form 202.202
. n* _ q5 ]( T1 L4 q</Files>
. I7 \" L8 p, u: ~8 p即 ip 是以 202.202 開頭的不能讀取副檔名為 secret.html 的檔案
0 B3 q3 [0 _0 P, {: M. T
+ a. X" S0 @4 h% n5 K.htaccess 內寫上:
: q$ l7 D8 h: S3 p( ^# y1 h9 m<Limit GET>
) \3 g/ h2 G. X1 |5 z
order deny,allow
/ G7 q$ j1 O5 U( R% `% @' m
deny from all
, e! o3 r: [$ |0 H m4 L6 I* A# F. j/ wallow from 202.202 domain.com
# g+ Z: s* d3 w/ h! m; S. b8 r
</Limit>
4 L$ ? T" K8 a9 N# [3 l- |0 @& P J
即只允許 ip 是以 202.202 為開頭或域名是 domain.com 的讀取此目錄內的任何內容
' f; t8 T0 f: n" B0 _2 Q |$ u4 v) r7 o! G: @5 F9 D
.htaccess 內寫上:
0 H% P: D4 Z8 DAuthUserFile "C:/Apache/htdocs/testing/.htpasswd"
3 D- _: }. @5 ^ E# L2 \
<files sercet.html>
; F% \0 {' \5 O
require user peter
1 M; ^: B- v' T3 v# M" e! n7 Y7 S3 O0 [
</files>
B, C, t# m! x( M2 g$ e
即只允許 .htpasswd 內列出的 peter 讀取 sercet.html
7 u; S# R0 r, i$ X
: C( C. f8 |( d. A- H5. 重新導向文件
- v2 y# a' h9 g
.htaccess 內寫上:
- F7 X3 _% |/ E9 q
Redirect /old
http://url/new
3 G+ t) D. r- v3 c/ k4 Q當用戶要求 /old 時,伺服器便把其重新導向至
http://url/new ,或在 .htaccess 內寫上:
" g+ ?0 h- z% i3 v- S% E5 B" uRedirect permanent /old
http://url/new, P) C, }4 V0 o; C
當用戶要求 /old 時,伺服器便叫瀏覽器把其永遠重新導向至
http://url/new
# s4 }1 Y3 p7 I3 Z! N" [# F
( y8 e4 ]" i4 s9 o& ~8 o5 C2 r6 z6. 防止列出目綠內的檔案
7 q! k) O5 e7 \7 V6 ?% d
.htaccess 內寫上:
4 s; ?) y! {% U( w& ^, X/ n
Option -Indexes
& `0 I8 q# y7 i" W) }這便不能列出檔案目錄了
8 X2 ~ g) m' l. Y9 ?& Q$ p.htaccess 內寫上:
- J' Y6 m$ S7 a( c$ f8 @6 {& W9 v
IndexIgnore *.zip *.txt
3 R8 A9 _6 I# x; H1 c4 ^
這便不列出檔案目錄內的 .zip 與 .txt 檔了
7 o" e/ [1 `4 c1 t3 | o
5 h) H6 s: @7 ^" ^( m* @
註: .htaccess 的大部分內容 (如:密碼保護) 可以寫回 httpd.conf 相應的目錄設定內( <Directory> )