<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/ DTD/wml_1.1.xml">

<wml>
<head>
<meta http-equiv="cache-control" content="max-age=180,private" />
</head>
<card title=".htaccess 学?笔?">
<p>
作者:<a href="index.php?action=showuser&amp;userid=1&amp;hash=">fiyour</a><br />时间:2009-02-20 18:23<br />分类:<a href="index.php?action=list&amp;cid=3&amp;hash=">随笔??</a><br />内容:.htaccess可以做大量范?的事情，包括：文件?密?保?、用?自?重新指向、自定????面、?更你的文件?展名、屏蔽特定的用?IP地址、只允?特定的IP地址、停止目?表以及使用其他文件作?index文件，等等......



1. Introduction 介?

文件名 .htaccess 属性 644 (RW-R&ndash;R&ndash;)

htaccess会影响它所在目?下的所有子目?

注意大多数内容都要求保持在一行之内，不要?行，否?会引起??



2. Error Documents ??文档

Official document: ErrorDocument Directive

ErrorDocument code document

例子

ErrorDocument 400 /errors/badrequest.html

ErrorDocument 404 http://yoursite/errors/notfound.html

ErrorDocument 401 &ldquo;Authorization Required&rdquo;

(注意之后内容如果出?的双引号需要??? \&rdquo;)

常?HTTP状??

Successful Client Requests

200 OK

201 Created

202 Accepted

203 Non-Authorative Information

204 No Content

205 Reset Content

206 Partial Content

Client Request Redirected

300 Multiple Choices

301 Moved Permanently

302 Moved Temporarily

303 See Other

304 Not Modified

305 Use Proxy

Client Request Errors

400 Bad Request

401 Authorization Required

402 Payment Required (not used yet)

403 Forbidden

404 Not Found

405 Method Not Allowed

406 Not Acceptable (encoding)

407 Proxy Authentication Required

408 Request Timed Out

409 Conflicting Request

410 Gone

411 Content Length Required

412 Precondition Failed

413 Request Entity Too Long

414 Request URI Too Long

415 Unsupported Media Type

Server Errors

500 Internal Server Error

501 Not Implemented

502 Bad Gateway

503 Service Unavailable

504 Gateway Timeout

505 HTTP Version Not Supported



3. Password Protection 密?保?

Official document: Authentication, Authorization and Access Control

假?密?文件?.htpasswd

AuthUserFile /usr/local/safedir/.htpasswd (?里必?使用全路径名)

AuthName EnterPassword

AuthType Basic

两?常???方式:

Require user windix

(?允?用?windix登?)

Require valid-user

(所有合法用?都可登?)

Tip: 如何生成密?文件

使用htpasswd命令(apache自?)

第一次生成需要?建密?文件

htpasswd -c .htpasswd user1

之后?加新用?

htpasswd .htpasswd user2



4. Enabling SSI Via htaccess 通?htaccess允?SSI(Server Side Including)功能

AddType text/html .shtml

AddHandler server-parsed .shtml

Options Indexes FollowSymLinks Includes

DirectoryIndex index.shtml index.html



5. Blocking users by IP 根据IP阻止用???

order allow,deny

deny from 123.45.6.7

deny from 12.34.5. (整个C?地址)

allow from all



6. Blocking users/sites by referrer 根据referrer阻止用?/站点??

需要mod_rewrite模?

例1. 阻止?一referrer: badsite.com

RewriteEngine on

# Options  FollowSymlinks

RewriteCond %{HTTP_REFERER} badsite\.com [NC]

RewriteRule .* - [F]

例2. 阻止多个referrer: badsite1.com, badsite2.com

RewriteEngine on

# Options  FollowSymlinks

RewriteCond %{HTTP_REFERER} badsite1\.com [NC,OR]

RewriteCond %{HTTP_REFERER} badsite2\.com

RewriteRule .* - [F]

[NC] - 大小写不敏感(Case-insensite)

[F] - 403 Forbidden

注意以上代?注?掉了&rdquo;Options  FollowSymlinks&rdquo;?个?句。如果服?器未在 httpd.conf 的 段落?置 FollowSymLinks, ?需要加上?句，否?会得到&rdquo;500 Internal Server error&rdquo;??。



7. Blocking bad bots and site rippers (aka offline browsers) 阻止坏爬虫和离???器

需要mod_rewrite模?

坏爬虫? 比如一些抓垃圾email地址的爬虫和不遵守robots.txt的爬虫(如baidu?)

可以根据 HTTP_USER_AGENT 来判断它?

(但是?有更无耻的如&rdquo;中搜 zhongsou.com&rdquo;之流把自己的agent?置? &ldquo;Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)&rdquo; 太流氓了，就无能?力了)

RewriteEngine On

RewriteCond %{HTTP_USER_AGENT} ^BlackWidow [OR]

RewriteCond %{HTTP_USER_AGENT} ^Bot\ mailto:craftbot@yahoo.com [OR]

RewriteCond %{HTTP_USER_AGENT} ^ChinaClaw [OR]

RewriteCond %{HTTP_USER_AGENT} ^Custo [OR]

RewriteCond %{HTTP_USER_AGENT} ^DISCo [OR]

RewriteCond %{HTTP_USER_AGENT} ^Download\ Demon [OR]

RewriteCond %{HTTP_USER_AGENT} ^eCatch [OR]

RewriteCond %{HTTP_USER_AGENT} ^EirGrabber [OR]

RewriteCond %{HTTP_USER_AGENT} ^EmailSiphon [OR]

RewriteCond %{HTTP_USER_AGENT} ^EmailWolf [OR]

RewriteCond %{HTTP_USER_AGENT} ^Express\ WebPictures [OR]

RewriteCond %{HTTP_USER_AGENT} ^ExtractorPro [OR]

RewriteCond %{HTTP_USER_AGENT} ^EyeNetIE [OR]

RewriteCond %{HTTP_USER_AGENT} ^FlashGet [OR]

RewriteCond %{HTTP_USER_AGENT} ^GetRight [OR]

RewriteCond %{HTTP_USER_AGENT} ^GetWeb! [OR]

RewriteCond %{HTTP_USER_AGENT} ^Go!Zilla [OR]

RewriteCond %{HTTP_USER_AGENT} ^Go-Ahead-Got-It [OR]

RewriteCond %{HTTP_USER_AGENT} ^GrabNet [OR]

RewriteCond %{HTTP_USER_AGENT} ^Grafula [OR]

RewriteCond %{HTTP_USER_AGENT} ^HMView [OR]

RewriteCond %{HTTP_USER_AGENT} HTTrack [NC,OR]

RewriteCond %{HTTP_USER_AGENT} ^Image\ Stripper [OR]

RewriteCond %{HTTP_USER_AGENT} ^Image\ Sucker [OR]

RewriteCond %{HTTP_USER_AGENT} Indy\ Library [NC,OR]

RewriteCond %{HTTP_USER_AGENT} ^InterGET [OR]

RewriteCond %{HTTP_USER_AGENT} ^Internet\ Ninja [OR]

RewriteCond %{HTTP_USER_AGENT} ^JetCar [OR]

RewriteCond %{HTTP_USER_AGENT} ^JOC\ Web\ Spider [OR]

RewriteCond %{HTTP_USER_AGENT} ^larbin [OR]

RewriteCond %{HTTP_USER_AGENT} ^LeechFTP [OR]

RewriteCond %{HTTP_USER_AGENT} ^Mass\ Downloader [OR]

RewriteCond %{HTTP_USER_AGENT} ^MIDown\ tool [OR]

RewriteCond %{HTTP_USER_AGENT} ^Mister\ PiX [OR]

RewriteCond %{HTTP_USER_AGENT} ^Navroad [OR]

RewriteCond %{HTTP_USER_AGENT} ^NearSite [OR]

RewriteCond %{HTTP_USER_AGENT} ^NetAnts [OR]

RewriteCond %{HTTP_USER_AGENT} ^NetSpider [OR]

RewriteCond %{HTTP_USER_AGENT} ^Net\ Vampire [OR]

RewriteCond %{HTTP_USER_AGENT} ^NetZIP [OR]

RewriteCond %{HTTP_USER_AGENT} ^Octopus [OR]

RewriteCond %{HTTP_USER_AGENT} ^Offline\ Explorer [OR]

RewriteCond %{HTTP_USER_AGENT} ^Offline\ Navigator [OR]

RewriteCond %{HTTP_USER_AGENT} ^PageGrabber [OR]

RewriteCond %{HTTP_USER_AGENT} ^Papa\ Foto [OR]

RewriteCond %{HTTP_USER_AGENT} ^pavuk [OR]

RewriteCond %{HTTP_USER_AGENT} ^pcBrowser [OR]

RewriteCond %{HTTP_USER_AGENT} ^RealDownload [OR]

RewriteCond %{HTTP_USER_AGENT} ^ReGet [OR]

RewriteCond %{HTTP_USER_AGENT} ^SiteSnagger [OR]

RewriteCond %{HTTP_USER_AGENT} ^SmartDownload [OR]

RewriteCond %{HTTP_USER_AGENT} ^SuperBot [OR]

RewriteCond %{HTTP_USER_AGENT} ^SuperHTTP [OR]

RewriteCond %{HTTP_USER_AGENT} ^Surfbot [OR]

RewriteCond %{HTTP_USER_AGENT} ^tAkeOut [OR]

RewriteCond %{HTTP_USER_AGENT} ^Teleport\ Pro [OR]

RewriteCond %{HTTP_USER_AGENT} ^VoidEYE [OR]

RewriteCond %{HTTP_USER_AGENT} ^Web\ Image\ Collector [OR]

RewriteCond %{HTTP_USER_AGENT} ^Web\ Sucker [OR]

RewriteCond %{HTTP_USER_AGENT} ^WebAuto [OR]

RewriteCond %{HTTP_USER_AGENT} ^WebCopier [OR]

RewriteCond %{HTTP_USER_AGENT} ^WebFetch [OR]

RewriteCond %{HTTP_USER_AGENT} ^WebGo\ IS [OR]

RewriteCond %{HTTP_USER_AGENT} ^WebLeacher [OR]

RewriteCond %{HTTP_USER_AGENT} ^WebReaper [OR]

RewriteCond %{HTTP_USER_AGENT} ^WebSauger [OR]

RewriteCond %{HTTP_USER_AGENT} ^Website\ eXtractor [OR]

RewriteCond %{HTTP_USER_AGENT} ^Website\ Quester [OR]

RewriteCond %{HTTP_USER_AGENT} ^WebStripper [OR]

RewriteCond %{HTTP_USER_AGENT} ^WebWhacker [OR]

RewriteCond %{HTTP_USER_AGENT} ^WebZIP [OR]

RewriteCond %{HTTP_USER_AGENT} ^Wget [OR]

RewriteCond %{HTTP_USER_AGENT} ^Widow [OR]

RewriteCond %{HTTP_USER_AGENT} ^WWWOFFLE [OR]

RewriteCond %{HTTP_USER_AGENT} ^Xaldon\ WebSpider [OR]

RewriteCond %{HTTP_USER_AGENT} ^Zeus

RewriteRule ^.* - [F,L]

[F] - 403 Forbidden

[L] - ?



8. Change your default directory page 改?缺省目??面

DirectoryIndex index.html index.php index.cgi index.pl



9. Redirects ?向

?个文件

Redirect /old_dir/old_file.html http://yoursite.com/new_dir/new_file.html

整个目?

Redirect /old_dir http://yoursite.com/new_dir

效果: 如同将目?移?位置一?

http://yoursite.com/old_dir -&gt; http://yoursite.com/new_dir

http://yoursite.com/old_dir/dir1/test.html -&gt; http://yoursite.com/new_dir/dir1/test.html

Tip: 使用用?目??Redirect不能?向的解决方法

当你使用Apache默?的用?目?，如 http://mysite.com/&quot;windix，当你想?向 http://mysite.com/&quot;windix/jump?，你会??下面?个Redirect不工作:

Redirect /jump http://www.google.com

正确的方法是改成

Redirect /&quot;windix/jump http://www.google.com

(source: .htaccess Redirect in &ldquo;Sites&rdquo; not redirecting: why?

)



10. Prevent viewing of .htaccess file 防止.htaccess文件被?看

order allow,deny

deny from all



11. Adding MIME Types 添加 MIME ?型

AddType application/x-shockwave-flash swf

Tips: ?置?型? application/octet-stream 将提示下?



12. Preventing hot linking of images and other file types 防盗?

需要mod_rewrite模?

RewriteEngine on

RewriteCond %{HTTP_REFERER} !^$

RewriteCond %{HTTP_REFERER} !^http://(www/\.)?mydomain.com/.*$ [NC]

RewriteRule \.(gif|jpg|js|css)$ - [F]

解析:

若 HTTP_REFERER 非空 (来源?其他站点，非直接?接) 并且

若 HTTP_REFERER 非(www.)mydomain.com??(忽略大小写[NC]) (来源非本站)

?于所有含有 .gif/.jpg/.js/.css ?尾的文件?出 403 Forbidden ??[F]

也可指定响?，如下例?示替??片

RewriteRule \.(gif|jpg)$

[R,L]

[R] - ?向(Redirect)

[L] - ?接(Link)



13. Preventing Directory Listing 防止目?列表??示

IndexIgnore *

IndexIgnore *.jpg *.gif

Tips:

允?目?列表?示: Options  Indexes

禁止目?列表?示: Options -Indexes

?示提示信息: ?首 文件HEADER, ?尾 文件README
</p><p>
<a href="index.php?action=comments&amp;articleid=205&amp;hash=">查看评论</a><br />
<a href="index.php?action=login&amp;hash=">立即登陆发表评论</a><br />
</p>
<p><a href="index.php?action=list&amp;hash=">返回日志列表</a><br /><a href="index.php?action=index&amp;hash=">返回主页</a></p>
</card>
</wml>
