以下摘自apache手册,说的很好。
一般情况下,不应该使用.htaccess
文件,除非你对主配置文件没有访问权限。有一种很常见的误解,认为用户认证只能通过.htaccess
文件实现,其实并不是这样,把用户认证写在主配置文件中是完全可行的,而且是一种很好的方法。
.htaccess
文件应该被用在内容提供者需要针对特定目录改变服务器的配置而又没有root权限的情况下。如果服务器管理员不愿意频繁修改配置,则可以允许用户通过.htaccess
文件自己修改配置,尤其是ISP在同一个机器上运行了多个用户站点,而又希望用户可以自己改变配置的情况下。
虽然如此,一般都应该尽可能地避免使用.htaccess
文件。任何希望放在.htaccess
文件中的配置,都可以放在主配置文件的<Directory>
段中,而且更高效。
避免使用.htaccess
文件有两个主要原因。
首先是性能。如果AllowOverride
启用了.htaccess
文件,则Apache需要在每个目录中查找.htaccess
文件,因此,无论是否真正用到,启用.htaccess
都会导致性能的下降。另外,对每一个请求,都需要读取一次.htaccess
文件。
还有,Apache必须在所有上级的目录中查找.htaccess
文件,以使所有有效的指令都起作用(参见指令的生效),所以,如果请求/www/htdocs/example
中的页面,Apache必须查找以下文件:
/.htaccess
/www/.htaccess
/www/htdocs/.htaccess
/www/htdocs/example/.htaccess
总共要访问4个额外的文件,即使这些文件都不存在。(注意,这可能仅仅由于允许根目录"/
"使用.htaccess
,虽然这种情况并不多。)
其次是安全。这样会允许用户自己修改服务器的配置,这可能会导致某些意想不到的修改,所以请认真考虑是否应当给予用户这样的特权。但是,如果给予用户较少的特权而不能满足其需要,则会带来额外的技术支持请求,所以,必须明确地告诉用户已经给予他们的权限,说明AllowOverride
设置的值,并引导他们参阅相应的说明,以免日后生出许多麻烦。
注意,在/www/htdocs/example
目录下的.htaccess
文件中放置指令,与在主配置文件中<Directory /www/htdocs/example>
段中放置相同指令,是完全等效的。
/www/htdocs/example
目录下的.htaccess
文件:
/www/htdocs/example
目录下的.htaccess文件的内容:
AddType text/example .exm
httpd.conf
文件中摘录的内容:
<Directory /www/htdocs/example>
AddType text/example .exm
</Directory>
但是,把配置放在主配置文件中更加高效,因为只需要在Apache启动时读取一次,而不是在每次文件被请求时都读取。
将AllowOverride
设置为none
可以完全禁止使用.htaccess
文件:
AllowOverride None