// Apache 分布配置文件(distributed configuration files) .htaccess 笔记 // 这个文件是针对单独一个目录起作用的,该配置文件中的命令只对该配置文件所在目录及其子目录起作用; // 如果想使用别的名字命名这个 "分布配置文件", 在主配置文件中使用 AceessFileName .config 来声明 // // 哪些命令可以放在该文件中? 哪些命令在该文件中起作用是由 AllowOverride 决定的; 在 .htaccess 文件的命令如何处理(是否覆盖其他的配置文件中的),是由 AllowOverride 决定的; 如果一个命令在 .htaccess 中被允许并且出现,那么他会覆盖掉其他配置文件中相同的命令 ( .htaccess 文件中命令有高的优先级)。 一般情况下,不应该使用.htaccess文件,除非你对主配置文件没有访问权限 .htaccess文件应该被用在内容提供者需要针对特定目录改变服务器的配置而又没有root权限的情况下。 --- 避免使用.htaccess文件有两个主要原因。 * 首先是性能。如果AllowOverride启用了.htaccess文件,则Apache需要在每个目录中查找.htaccess文件,因此,无论是否真正用到,启用.htaccess都会导致性能的下降。另外,对每一个请求,都需要读取一次.htaccess文件。 * 其次是安全。这样会允许用户自己修改服务器的配置,这可能会导致某些意想不到的修改,所以请认真考虑是否应当给予用户这样的特权。 --- 把配置放在主配置文件中更加高效,因为只需要在Apache启动时读取一次,而不是在每次文件被请求时都读取。 任何希望放在.htaccess文件中的配置,都可以放在主配置文件的<Directory>段中,而且更高效。 // 详细文档见: // http://lamp.linux.gov.cn/Apache/ApacheMenu/howto/htaccess.html // /** * AllowOverride 指令 */ AllowOverride all | none | directive-type directive-type ... AllowOverride 只能在 <Directory> 部分指定。 (AllowOverride is valid only in <Directory> sections specified without regular expressions, not in <Location>, <DirectoryMatch> or <Files> sections. ) 为了安全和性能,不要在根目录( <Directory /> )使 .htaccess 起作用。 For security and performance reasons, do not set AllowOverride to anything other than None in your <Directory /> block. Instead, find (or create) the <Directory> block that refers to the directory where you're actually planning to place a .htaccess file. // /** * Context 指令 */ 指定命令在哪些配置文件中出现是合理的,使用 逗号分割的一些列表. This indicates where in the server's configuration files the directive is legal. It's a comma-separated list of one or more of the following values: 可以是下面的一些值 server config // 命令可以在服务器的配置文件作用,在 <VirtualHost > 和 <Directory > 及 .htaccess 中都不起作用。 virtual host // 命令可以自阿 <VitualHost > 起作用 directory // <Directory>, <Location>, <Files>, 和 <Proxy> 起作用 .htacess // 命令可以出现在 .htaccess 文件中,但是不一定能起作用,因为 AllowOverride 决定哪些命令会在 .htaccess 中起作用