[Linux] [轉貼]Apache 網頁認證.htaccess 設定方法
, W0 p, | n* H/ t! o1 \* w
( V# T5 c$ h7 c; }.htaccess
" Z6 N! @& R6 I) U
.htaccess 可放在任何一網頁目錄內,當該目錄在 httpd.conf 設定不是 AllowOverride None 便可使用 .htaccess 的功能了,而設定作 AllowOverride All 更可使用 .htaccess 的所有功能了
: Z: B; A; x% d5 A* k5 @# r6 G6 |2 R.htaccess 可用作對該目錄及其子目錄進行取存控制,而不用修改 httpd.conf 及不用重新啟動伺服器軟件
/ E* Y3 K# O0 N4 } d& }. v: N% P
--------------------------------------------------------------------------------
' |6 e+ A& _6 g* }. v/ R: Jhttpd.conf 的設定
* w- V+ i. M' ~7 f
加上或取消註解 (#) ]定改成 AllowOverride All
# g) i9 p0 R7 k7 t2 ` l, s& P然後儲存及重新啟動伺服器軟件
# ^; y( y$ b/ V$ J5 t7 U7 O
--------------------------------------------------------------------------------
! B6 `& E# u" c2 p.htaccess 的用法
8 _- e( b3 z2 K3 g2 J5 e先把 .htaccess 放在要用的目錄內 (Windows 系統內不可以直接把檔案改名作 .htaccess ,需用間接的方法,如在指令模式下 ren filename.txt .htaccess 或用 FTP 軟件修改該檔名)
7 Q! S' p$ p j* c X+ p; t% R
用法:
2 }: d0 b6 Y! ~+ G9 t: K/ F
1. 密碼保護
+ X5 E5 s7 F" ^
.htaccess 內寫上:
3 A' f6 X5 `* L5 v3 V: R1 {0 l2 K
AuthName "testing"
; ~2 R# N, c# V9 l) |6 A7 sAuthType Basic
( c2 I4 F W/ o5 x- b mAuthUserFile "C:/Apache/htdocs/testing/.htpasswd"
. J) e* a! Z' s3 |. N
require valid-user
+ c& i$ J& N: O: _6 VAuthName 是當你進入密碼保護時,瀏覽器出現的說明
' H4 `$ R. ?5 [& L# n6 p Q, E% V
AuthUserFile "C:/Apache/htdocs/testing/.htpasswd" 是密碼檔案的位置
$ T0 p7 C- o5 f# Y
密碼檔案 (.htpasswd) 內寫上:
5 B2 R4 X! }) `9 w
user1:password1
8 D [# [. l3 ~% q' J) t
user2:password2
* q. X0 C2 ]- c' w但密碼不應直接寫上,即是如果有一使用者是 test ,密碼是 password ,先用 C:\Apache\bin 內的 htpasswd.exe 把密碼加密,用法如下] require group group1 ,因此只有 group1 的使用者可通過,即 john , peter 及 david
& q1 l$ K7 s: {( F9 [! u R
; Q7 T' F% C3 ^! R0 x9 h$ w2. 自設錯誤報告文件
+ r5 X; }) P% x* U, x$ J.htaccess 內寫上:
+ k5 ?! i! g! J8 }, j! t( tErrorDocument 404 /404.html
( }# P7 _: C& G; a" G$ d
如果找不到網頁時,便輸出 404.html 的內容,其他錯誤時做法亦然,如:
3 h4 W( _, u; @1 i4 \# q) Q
ErrorDocument 404 "<html><body>找不到網頁</body></html>
/ i" v- k5 C8 r0 y; c/ J5 E9 o+ HErrorDocument 500 /500.html
" {# x! b1 J) A
$ p7 t' [% B+ M) Z# `
3. 自設首頁檔案
; f6 M6 R' _1 u: ?. w0 q.htaccess 內寫上:
9 l; m2 d, G% Z9 W+ L- L
DirectoryIndex a.html
% V8 E8 _- @; x, c" [" K+ L首頁檔案便是 a.html 了
# R0 Z/ u \" I5 Z! i! o' |5 g- {3 L7 `) e4 `6 v7 Y6 Q1 k
4. 禁止讀取檔案
: D" l: X, D% d K0 |6 |. [.htaccess 內寫上:
+ y1 C# p: P$ b, t! Z9 N$ z. _
<Files secret.html>
* i4 R t% s5 o5 ?: F: f
order allow,deny
1 a0 j0 [( M" Kdeny from all
+ S) s& G* h3 [. T- I: a2 H</Files>
; ^2 U5 U9 J; Ndeny from all 即所有人皆不能讀取 sercet.html
4 Q1 T; ^. x1 d( ^& y) {
" ]; n0 v; r# m" l7 }而 Apache 1.3 以後的版本,更可以用支援 regular expression 的 filesmatch
9 W$ k/ F1 f4 w* N0 q" U; H/ O7 K2 s.htaccess 內寫上:
~% I6 o: b; |1 C }: {<filesmatch "\.jpg">
2 P+ e# D% y/ ^
order allow,deny
- a1 B. b- r8 R6 Vdeny from all
$ h; o8 \5 x3 p4 A+ @</filesmatch>
: W: M( l0 x9 G! \$ \- k6 G
即所有人皆不能讀取副檔名為 .jpg 的檔案
& K* S J E. j+ _# D0 @* y8 S$ N. O9 c+ {2 G. L: w
.htaccess 內寫上:
" N1 V8 a; c* y7 o8 J<Files secret.html>
$ J2 r0 h; Q5 b* e
order allow,deny
% X a, J" }! P( Y6 ^8 ~
allow form all
9 N& ]1 t" T# [3 O, Y
deny form 202.202
, c* d+ h; @* a) g
</Files>
5 M' T+ K9 h( ^5 i- x即 ip 是以 202.202 開頭的不能讀取副檔名為 secret.html 的檔案
! m0 F$ w. Q& X9 }6 a4 b/ Y5 q2 F2 [3 K6 n1 t! W) l
.htaccess 內寫上:
& F$ q, z! F/ l0 T8 P
<Limit GET>
3 }1 z& { N* [" r9 R5 u1 a
order deny,allow
$ Q! r: `# H g4 e' g& j# D: i- v
deny from all
( h2 I' z% x- @( K Rallow from 202.202 domain.com
T7 ~% s$ \; r" m1 k% K) p& R
</Limit>
0 C0 K# |# P8 c) t$ Q* p7 z3 v即只允許 ip 是以 202.202 為開頭或域名是 domain.com 的讀取此目錄內的任何內容
/ \1 Y& q) p* y
1 z+ R& V- Q/ a s- |4 L" r6 u8 q- F.htaccess 內寫上:
. Z! f7 }3 a: `9 e) k/ bAuthUserFile "C:/Apache/htdocs/testing/.htpasswd"
3 I9 m4 G2 |- V: g) x- R/ z1 U) x<files sercet.html>
3 u5 r6 Y1 f1 R2 Z' R' Y% i+ l% g3 @* orequire user peter
; g9 k" Z- z7 b
</files>
) D7 x. P0 n' g7 B2 z' l即只允許 .htpasswd 內列出的 peter 讀取 sercet.html
& V% D4 i& T; K& x' P, a9 L, D' x% h8 ~5 E1 g
5. 重新導向文件
1 {3 P- M6 U3 M) ?; E
.htaccess 內寫上:
0 L' e: g7 Z( }3 V3 y0 NRedirect /old
http://url/new8 W% k$ `, o' n6 w+ m: i7 T
當用戶要求 /old 時,伺服器便把其重新導向至
http://url/new ,或在 .htaccess 內寫上:
) H# _( c( ^+ D% ]: l' T1 \1 dRedirect permanent /old
http://url/new+ s/ E7 w9 F- S7 j7 \+ J
當用戶要求 /old 時,伺服器便叫瀏覽器把其永遠重新導向至
http://url/new6 |$ \- ]% V. c$ @% @4 n x7 `( O4 A4 `
2 T9 K% Z5 A6 m6. 防止列出目綠內的檔案
! |5 F( B7 q5 d- R/ }.htaccess 內寫上:
$ b7 s4 m. \+ h" M
Option -Indexes
! E' V5 j* G! S7 y" S% ?- L這便不能列出檔案目錄了
# k( O# i% g0 W& e+ }3 p
.htaccess 內寫上:
8 Z( A1 z& l0 g. J' b7 c& E
IndexIgnore *.zip *.txt
& K9 v; A/ Q4 H( ^這便不列出檔案目錄內的 .zip 與 .txt 檔了
2 E+ c4 w4 G1 J: A; d, v! H8 d% {% i* s
註: .htaccess 的大部分內容 (如:密碼保護) 可以寫回 httpd.conf 相應的目錄設定內( <Directory> )