[Linux] [轉貼]Apache 網頁認證.htaccess 設定方法
( R9 N$ U5 @% s
9 o# w2 a8 y9 ]4 ?& S. x# a1 F
.htaccess
) x. J; i. D* u9 O* H* T7 j
.htaccess 可放在任何一網頁目錄內,當該目錄在 httpd.conf 設定不是 AllowOverride None 便可使用 .htaccess 的功能了,而設定作 AllowOverride All 更可使用 .htaccess 的所有功能了
+ D6 _/ s/ z. q0 M! @* R: d8 I/ v
.htaccess 可用作對該目錄及其子目錄進行取存控制,而不用修改 httpd.conf 及不用重新啟動伺服器軟件
! W7 X% Y$ t( X7 p--------------------------------------------------------------------------------
( V- I5 L4 q7 t4 ~9 O0 w n
httpd.conf 的設定
3 E' w- y. |) ^% s/ p) e
加上或取消註解 (#) ]定改成 AllowOverride All
4 Q) x( T- f7 l1 u, _$ o$ T: r/ J
然後儲存及重新啟動伺服器軟件
* q4 P+ P; U P$ v6 [
--------------------------------------------------------------------------------
6 v3 e4 W/ \6 F0 a- P# T.htaccess 的用法
# B2 X+ F& h, }4 |" w先把 .htaccess 放在要用的目錄內 (Windows 系統內不可以直接把檔案改名作 .htaccess ,需用間接的方法,如在指令模式下 ren filename.txt .htaccess 或用 FTP 軟件修改該檔名)
" U# z0 X, G6 j/ g, ~
用法:
' B2 h/ h3 J4 {( Y7 H5 ]1. 密碼保護
/ U# D2 v, T5 \.htaccess 內寫上:
3 L* a: E3 I6 G( rAuthName "testing"
1 N+ ]/ Z3 \$ X5 [5 j' O2 c n
AuthType Basic
* b8 d, C( _$ C3 S- f2 t; SAuthUserFile "C:/Apache/htdocs/testing/.htpasswd"
( \3 H6 J: T9 W9 I& Y( n
require valid-user
# \2 B3 ~2 x# b2 j: ]8 }' [" t
AuthName 是當你進入密碼保護時,瀏覽器出現的說明
" J) v4 R+ W: k; ?% P! \AuthUserFile "C:/Apache/htdocs/testing/.htpasswd" 是密碼檔案的位置
+ v/ \" @/ X+ N& H1 [1 _
密碼檔案 (.htpasswd) 內寫上:
+ _ N& J8 m/ I: O9 S* K* L
user1:password1
5 w+ Q, `, H6 s+ t9 \ F6 y/ Luser2:password2
% v+ J, m% L2 _% R* G( \% [
但密碼不應直接寫上,即是如果有一使用者是 test ,密碼是 password ,先用 C:\Apache\bin 內的 htpasswd.exe 把密碼加密,用法如下] require group group1 ,因此只有 group1 的使用者可通過,即 john , peter 及 david
/ C2 f+ x8 I6 B R
4 [. T6 S0 a0 e0 P1 a2. 自設錯誤報告文件
- `' a7 P$ I J% F.htaccess 內寫上:
" q' O. w" F8 _, ^7 {
ErrorDocument 404 /404.html
( z: ^: P3 t7 \5 a$ ?2 k& p L! J如果找不到網頁時,便輸出 404.html 的內容,其他錯誤時做法亦然,如:
( p( a: }/ o0 x! Q' y9 _, e
ErrorDocument 404 "<html><body>找不到網頁</body></html>
! f, |9 N; a" }
ErrorDocument 500 /500.html
3 y8 |( F* j8 x* O% s- a6 m) i5 w2 b# p
% L, A1 m( C1 z u3. 自設首頁檔案
: i/ ?. C& J- n) y" N.htaccess 內寫上:
* b8 s8 J$ [1 z8 t3 ]
DirectoryIndex a.html
; O6 P, f5 j0 A1 r9 v* j
首頁檔案便是 a.html 了
( _( T, P5 ^, m
0 j. e- M' g' ~* y1 x4. 禁止讀取檔案
: w( M- d8 ]5 Z/ P- v; G7 q
.htaccess 內寫上:
- t z2 ] P: P
<Files secret.html>
2 u7 l% p7 B5 Korder allow,deny
3 e% T3 h! R: l; [) j- p2 W
deny from all
: d! H' y; N+ x0 p) Z- u
</Files>
8 l; r3 Y& z9 w7 s rdeny from all 即所有人皆不能讀取 sercet.html
% U5 P1 I5 ~- ?2 n" V+ m$ {3 G H/ F8 S) A
而 Apache 1.3 以後的版本,更可以用支援 regular expression 的 filesmatch
9 u0 d/ }0 n0 c- @/ v* H. L* N
.htaccess 內寫上:
# e( e& v5 s% T6 P" _<filesmatch "\.jpg">
- J, Q( } B$ W4 u( \
order allow,deny
- S5 ^6 [5 G1 k
deny from all
7 ?2 _3 q: a0 {+ Q$ e$ s</filesmatch>
5 x* I& R# [/ O" S
即所有人皆不能讀取副檔名為 .jpg 的檔案
4 }. t1 n4 I7 F6 |: t( J+ X5 I
/ t- f0 t, J: F- R4 ]
.htaccess 內寫上:
6 x& a: k. @# z- I1 I4 a+ t# x<Files secret.html>
9 x/ M. m' }" _$ M% G% ^( K! Vorder allow,deny
$ n/ H9 c2 F0 f: A$ U! N1 C) E) D
allow form all
$ z2 r: u0 ]4 o% Z* e; ~. h4 S
deny form 202.202
: r4 R& T( l- P ]
</Files>
, c" I G. k) i; t
即 ip 是以 202.202 開頭的不能讀取副檔名為 secret.html 的檔案
3 `$ k5 H! X0 q E; ~
8 `, [5 N9 G% k Z# H
.htaccess 內寫上:
% U' U( \1 }0 J2 \' L/ q+ O4 |<Limit GET>
' L" n6 T* k& Q0 ]; @0 v" Eorder deny,allow
, h6 E1 J7 C4 V* b' X4 N
deny from all
$ w/ p4 e, q8 x
allow from 202.202 domain.com
9 v8 s8 Y! |$ \
</Limit>
- s8 C' U6 h; j1 g; c8 ?! P即只允許 ip 是以 202.202 為開頭或域名是 domain.com 的讀取此目錄內的任何內容
) q. O; y$ c& Y8 v
4 I [0 |+ K$ B. x+ {; `+ V0 F% {7 U.htaccess 內寫上:
7 `+ _( h* U# X: A/ i) M7 d
AuthUserFile "C:/Apache/htdocs/testing/.htpasswd"
0 c1 _* T" S6 r( H: K<files sercet.html>
( H7 w8 o V1 p+ D
require user peter
6 U( z" ^$ O. ^' r5 ]& {9 ^& y
</files>
" ~2 d9 R" y* `; d
即只允許 .htpasswd 內列出的 peter 讀取 sercet.html
' L+ \" s% k/ ]3 h: T$ E0 I& |) |2 V' g& K+ V- I5 g) D
5. 重新導向文件
/ r3 L4 s; D% R, I5 v! \.htaccess 內寫上:
^; d' Q: y0 e% }% b) NRedirect /old
http://url/new
3 F0 [7 {* o! o# f當用戶要求 /old 時,伺服器便把其重新導向至
http://url/new ,或在 .htaccess 內寫上:
# B: u5 b9 n2 U6 _) Z4 DRedirect permanent /old
http://url/new
* e1 \3 N! U# I6 B! T% b) J3 z當用戶要求 /old 時,伺服器便叫瀏覽器把其永遠重新導向至
http://url/new
1 Q, W- V: Q9 k, m7 @
: v& Z! d, t6 Q# j6. 防止列出目綠內的檔案
( i G3 C$ S3 m8 D, f.htaccess 內寫上:
+ Z/ s/ Z$ {" {0 V1 R! SOption -Indexes
% L$ M2 \2 q* ? u% `/ [4 k6 c
這便不能列出檔案目錄了
# ?/ \2 A% p1 x6 x0 ]/ O |.htaccess 內寫上:
: h3 p+ `) s: M$ ^IndexIgnore *.zip *.txt
# ~9 Q0 Y1 R) U6 h" C2 k
這便不列出檔案目錄內的 .zip 與 .txt 檔了
$ V; N# M. J3 `& \ T0 k
/ y$ |$ }. H$ Y; U
註: .htaccess 的大部分內容 (如:密碼保護) 可以寫回 httpd.conf 相應的目錄設定內( <Directory> )