16.5.3 分布式配置文件:.htaccess
.htaccess文件又称为“分布式配置文件”,该文件可以覆盖httpd.conf文件中的配置,但是它只能设置对目录的访问控制和用户认证。.htaccess文件可以有多个,每个.htaccess文件的作用范围仅限于该文件所存放的目录以及该目录下的所有子目录。虽然.htaccess能实现的功能在<Directory>段中都能够实现,但是因为在.htaccess修改配置后并不需要重启Apache服务就能生效,所以在一些对停机时间要求较高的系统中可以使用。
%注意:一般情况下,Apache并不建议使用.htaccess文件,因为使用.htaccess文件会对服务器性能造成影响。
下面还是以16.5.2节中的例子为基础来演示在.htaccess文件中配置访问控制和用户认证的过程。
(1)打开httpd.conf配置文件,将security_info目录的配置信息替换为下面的内容。
#使用Diretory段设置/usr/local/apache2/htdocs/secure_info目录的属性
<Directory "/usr/local/apache2/htdocs/secure_info">
#允许.htaccess文件覆盖httpd.conf文件中的secure_info目录配置
AllowOverride All
</Directory>
修改主要包括两个方面:
q 删除原有的关于访问控制和用户认证的参数和指令,因为这些指令将会被写到.htaccess文件中去。
q 添加了AllowOverride All参数,允许.htaccess文件覆盖httpd.conf文件中关于secure_info目录的配置。如果不做这项设置,.htaccess文件中的配置将不能生效。
(2)重启Apache服务,在/usr/local/apache2/htdocs/secure_info/目录下创建一个文件.htaccess,写入以下内容:
#使用AuthType参数设置认证类型
AuthType Basic
#使用AuthName参数设置
AuthName "secure_info_auth"
#使用AuthUserFile参数设置认证口令文件的位置
AuthUserFile /usr/local/apache2/conf/users
#使用require参数设置sam用户可以访问
require user sam
#使用Order参数设置先执行拒绝规则,再执行允许规则
Order deny,allow
#使用Deny参数设置拒绝所有客户端访问
Deny from all
#使用Allow参数设置允许172.20.17.55客户端访问
Allow from 172.20.17.55
使用浏览器访问http://demoserver/security_info进行测试,将会返回如图16.32所示的页面。现在对.htaccess文件做任何的修改,都不需要重启Apache服务,立刻就会生效。