.htaccess可以做大量范围的事情,包括:文件夹密码保护、用户自动重新指向、自定义错误页面、变更你的文件扩展名、屏蔽特定的用户ip地址、只允许特定的ip地址、停止目录表以及使用其他文件作为index文件,等等……
1. introduction 介绍
文件名 .htaccess 属性 644 (rw-r–r–)
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 “authorization required”
more..
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
注意以上代码注释掉了”options +followsymlinks”这个语句。如果服务器未在 httpd.conf 的 段落设置 followsymlinks, 则需要加上这句,否则会得到”500 internal server error”错误。
7. blocking bad bots and site rippers (aka offline browsers) 阻止坏爬虫和离线浏览器
需要mod_rewrite模块
坏爬虫? 比如一些抓垃圾email地址的爬虫和不遵守robots.txt的爬虫(如baidu?)
可以根据 http_user_agent 来判断它们
(但是还有更无耻的如”中搜 zhongsou.com”之流把自己的agent设置为 “mozilla/4.0 (compatible; msie 5.5; windows nt 5.0)” 太流氓了,就无能为力了)
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 -> http://yoursite.com/new_dir
http://yoursite.com/old_dir/dir1/test.html -> http://yoursite.com/new_dir/dir1/test.html
tip: 使用用户目录时redirect不能转向的解决方法
当你使用apache默认的用户目录,如 http://mysite.com/~windix,当你想转向 http://mysite.com/~windix/jump时,你会发现下面这个redirect不工作:
redirect /jump http://www.google.com
正确的方法是改成
redirect /~windix/jump http://www.google.com
(source: .htaccess redirect in “sites” 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