部门级以上慎用.htaccess

王朝other·作者佚名  2008-05-18
窄屏简体版  字體: |||超大  

.htaccess文件(分布式配置文件)提供了针对目录改变配置的方法, 即在一个特定的文档目录中放置一个包含一个或多个指令的文件,以作用于此目录及其所有子目录。

用.htaccess做基于apache httpd的访问控制就是最常见的一种用法,

方法很简单,

apache默认编译下,authentication是enable的。

第一步,我们得建立一个目录访问控制的用户

如果我们原来的系统中没有建立过类似的帐户,我们就用一下命令

root@mysun:~# htpasswd -c /usr/local/apache2/conf/passwd test

按提示输入密码,这样就建立好了一个用户,

如果我们系统中原来有过用户(可以more一下conf下的passwd)

我们就可以在添加用户的时候去掉"-c"

第二步,写httpd.conf或任意apache配置文件,(当然了,我们默认情况下写httpd.conf)追加下列行,

<Directory /www/mysun/phpmysqladmin>

AuthName "test"

AuthType basic

AuthUserFile /usr/local/apache2/conf/passwd

// 请注意我在这里并没有用.htaccess

require valid-user

</Directory>

重启apache就目标文件夹"/www/mysun/phpmysqladmin"在被httpd请求访问的时候就有密码保护了。

这种密码保护方式被广泛地应用于类似PhpMysqlAdmin之类的没有管理员认证登录功能的页面的保护。

一般情况下,很多虚拟主机提供商为了方便,就直接定义了AuthUserFile到某个虚拟主机用户的家目录下的.htaccess,允许用户通过.htaccess文件自己修改配置。认为这样服务器管理员就可以免去频繁修改配置的烦恼,更有甚着,误认为用户认证只能通过.htaccess文件实现,其实并不是这样,把用户认证写在主配置文件中是完全可行的,而且是一种很好的方法。

为什么要避免使用.htaccess文件有两个主要原因:

首先是性能问题,如果AllowOverride启用了.htaccess文件,则Apache需要在每次用户请求某个目录时去该目录中查找.htaccess文件,因此,无论是否某个目录真正启用了.htaccess,都会导致性能的下降。

Apache会检查所有上级的目录中的.htaccess文件,以使所有有效的指令都起作用,所以,如果请求/www/mysun/service/webftp/files中的页面,Apache必须查找以下文件:

/.htaccess

/www/.htaccess

/www/mysun/.htaccess

/www/mysun/service/.htaccess

/www/mysun/service/webftp/.access

/www/mysun/service/webftp/files/.htaccess

我们看到,apache总共要访问6个额外的文件,即使这些文件都不存在。这对于服务器而言是相当恐怖的一个负荷。

其次是安全问题,这样会允许用户自己修改服务器的配置,这可能会导致某些意想不到的后果。

其实把文件夹配置相关信息写进.htaccess与服务器主配置文件里的实现的效果是一样的,并且把配置放在主配置文件中更加高效,因为只需要在Apache启动时读取一次,而不是在每次文件被请求时都读取。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航