当前位置:操作系统 > Unix/Linux >>

部门级以上慎用.htaccess

.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启动时读取一次,而不是在每次文件被请求时都读取。本文来自:http://www.xiaoyaxiao.com/5813.html
发表您的高见!
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,