目录 Table of Contents
一、.htaccess简介1.什么是.htaccess.htaccess是一个纯文本文件,里面存放着Apache服务器配置相关的一些指令,它类似于Apache的站点配置文件,如httpd.conf(Apache2已经支持多站点,因此你的站点配置文件可能在/etc/apache2/conf.d/目录下)。 2.AllowOverride All通常情况下,Apache是默认启用.htaccess的,但是为了以防万一,请检查一下自己站点的配置文件,如httpd.conf,是否有这行: AllowOverride All 这行允许重写配置文件。也就是如果能够从.htaccess加载配置文件,那么就以.htaccess为配置文件对其所在目录进行配置。 3.500错误如果你租用了云服务提供商的主机或者空间,那么他们可能不会给你读写httpd.conf文件的权限,你也不可能检查AllowOverride命令参数是否为All,这时,你可以新建一个目录,在里面写一个.htaccess文件,文件中随意写入一些服务器看不懂的东西,然后访问该目录里的一个页面,耐心等待500错误的出现。 4.有用的文档二、.htaccess访问控制(Allow/Deny)1.访问控制基础:Order命令为了限制用户访问一些关键目录,.htaccess可以提供目录访问限制。你只需要在要限制的目录中,加入如下.htaccess文件: # no one gets in here! deny from all 这会限制所有用户通过浏览器访问该目录,这太一刀切了,因此我们还可以增加一些特定的条件,如允许指定IP地址的访问: Order Allow,Deny Deny from All Allow from 192.168.0.0/24 Order命令Order命令是一个难点,也是配置apache的基础,它决定了Apache处理访问规则的顺序。
了解Order的用法后,再仔细考虑下上面的例子,你或许能够发现Deny命令是多余的,以下用法和之前的描述语义相同: Order Allow,Deny Allow from 192.168.0/24 2.利用.htaccess过滤域名或网络主机(Allow/Deny)下例可以限制所有含有“domain.com”的网络主机访问网站: Order Allow,Deny Allow from all Deny from .*domain\.com.* {!}Info:有关htaccess的正则表达式用法,请查阅本站《.htaccess正则表达式》一文。 3.利用.htaccess禁止访问指定文件(Files)Files命令可以用于过滤指定文件: # secure htaccess file <Files .htaccess> order allow,deny deny from all </Files> 4.利用.htaccess禁止访问指定文件类型(FilesMatch)下面的代码将限制访问所有.log和.exe文件: <FilesMatch ".(log|exe)$"> Order allow,deny Deny from all </FilesMatch> 我们还可以通过Files命令描述文件类型,但是需要在命令后面加一个波浪线(~),该符号启用Files命令的正则表达解析功能: <Files ~ "^.*\.([Ll][Oo][Gg])|([eE][xX][eE])"> Order allow,deny Deny from all Satisfy All </Files> 有以下几点需要读者注意:
5.高级访问控制(Rewrite)我们还可以通过运用Rewrite实现更强大的访问控制,但是Rewrite不是本文讨论的内容。读者可以参看:利用RewriteCond和RewriteRule进行访问控制一文。 三、利用.htaccess进行密码保护与验证1.配置.htaccessAuthType Basic AuthName "restricted area" AuthUserFile /usr/local/var/www/html/.htpasses require valid-user 这个配置文件可以保护.htaccess所在的整个目录,简单说明下参数:
如果验证失败,则会出现401错误。 2.生成.htpasses文件如何生成.htpasses文件呢?我们通过 htpasswd -c /usr/local/var/www/html/.htpasses lesca 它会提示你输入密码,并确认。之后将密码文件.htpasses保存在/usr/local/var/www/html/目录下。 3.对文件进行密码保护保护与.htaccess在同一目录下的文件secure.php: # password-protect single file <Files secure.php> AuthType Basic AuthName "Prompt" AuthUserFile /home/path/.htpasswd Require valid-user </Files> 保护.htaccess所在目录下的多个文件: # password-protect multiple files <FilesMatch "^(execute|index|secure|insanity|biscuit)*$"> AuthType basic AuthName "Development" AuthUserFile /home/path/.htpasswd Require valid-user </FilesMatch> 4.对指定IP进行密码保护仅允许IP地址为99.88.77.66的主机直接访问该目录,其他IP需要验证。 AuthType Basic AuthName "Personal" AuthUserFile /home/path/.htpasswd Require valid-user Allow from 99.88.77.66 Satisfy Any 5.安全性出于安全考虑,将.htpasses文件存放在WEB目录树之外也许是个好方法,但是由于.htpasses是隐藏文件,而且Apache不会输出隐藏文件,因此可以满足基本的安全要求。这是通过在主配置文件中加入如下限制实现的: <Files ~ "^\.ht"> Order allow,deny Deny from all Satisfy All </Files> 一般而言,这是默认设置,用户无需手动添加。我们唯一需要担心的是密码在网络传输过程中是明文形式,这很容易被黑客破译。Coz[1]提供了一个开源项目Pajamas可以在本地利用JS对密码进行MD5加密,有兴趣的读者可以前去研究一下。 四、目录浏览与主页如果你打开本站的下载页面http://download./,就会发现你可以看见这个站点下的所有文件。像这样的特性也可以通.htaccess来设置用户是否有权限浏览服务器目录。 1.启用目录浏览# enable directory browsing Options All +Indexes 2.禁用目录浏览# disable directory browsing Options All -Indexes 我们还可以通过IndexIgnore指令来禁用目录浏览。 # prevent folder listing IndexIgnore * 通过IndexIgnore指令,我们可以禁止对指定类型的文件浏览: # prevent display of select file types IndexIgnore *.wmv *.mp4 *.avi *.etc 3.自定义目录浏览如果你希望Apache在展示你的WEB目录时看起来与众不同,那么你需要启用FancyIndexing选项: <IfModule mod_autoindex.c> IndexOptions FancyIndexing </ifModule> 通过这个选项,你可以实现自定义图标、添加文件类型描述、按日期排序等。但是这些已经超过了本文的讨论范围,Lesca可以给你一个做好的例子,你可以在这页查看效果。 4.配置目录主页文件即使启用了目录浏览,Apache未必会展示该目录的内容,因为该目录可能存在像index.htm这样的默认主页文件。Apache会有限展示主页文件,我们可以通过.htaccess设置: DirectoryIndex index.html index.php index.htm 5.配置错误页面如果Apache遇到错误,就会输出错误页面。配置自定义的错误页面,也许可以挽留即将离开的用户。 # custom error documents ErrorDocument 401 /err/401.php ErrorDocument 403 /err/403.php ErrorDocument 404 /err/404.php ErrorDocument 500 /err/500.php 五、URL重写与URL重定向下一篇文章,我们将介绍htaccess的重头戏:URL重写与URL重定向 References:[1] .htaccess tips and tricks 本文出自 Lesca技术宅,转载时请注明出处及相应链接。 6 Comments |
|