apache核心指令解说(一)
AcceptFilter 指令
说明 根据协议类型对监听Socket进行优化
语法 AcceptFilter protocol accept_filter
作用域 server config
状态 核心(C)
模块 core
兼容性 仅在 Apache 2.1.5 以后的版本中可用这个指令使得操作系统根据协议类型对监听socket进行特别的优化。其基本前提是内核 在数据接受完毕或一个完整的HTTP请求缓冲完成前不向服务器进程发送socket 。目前仅支持FreeBSD的接收过滤器(Accept Filter)和Linux的更原始的(more primitive)TCP_DEFER_ACCEPT 。FreeBSD上的默认值是:AcceptFilter http httpready
AcceptFilter https datareadyhttpready接收过滤器(Accept Filter)在内核级别缓冲整个HTTP请求。一旦一个请求体被完整接收,内核将把它发送给服务器。参见accf_http(9)手册页以获得更详细的 信息。因为HTTPS请求已经被加密了,所以只了accf_data(9)过滤器。Linux上的默认值是:AcceptFilter http data
AcceptFilter https dataLinux的TCP_DEFER_ACCEPT并不支持对http请求进行缓冲。除none之外的任何值都将在监听程序上启用TCP_DEFER_ACCEPT 。参见tcp(7)手册页以获得更多详情。使用none将会为那个协议禁用接收过滤器(accept filter)。这对于像nntp这样需要服务器先发送数据的协议很有用处:AcceptFilter nttp noneAcceptPathInfo 指令
说明 是否接受附带多余路径名信息的请求
语法 AcceptPathInfo On|Off|Default
默认值 AcceptPathInfo Default
作用域 server config, virtual host, directory, .htaccess
覆盖项 FileInfo
状态 核心(C)
模块 core
兼容性 仅在 Apache 2.0.30 及以后的版本中可用此指令决定是否接受在实际名(或实际目录中一个不存在的)后跟随多余路径名信息的请求。这个多余的路径名信息可以当作PATH_INFO环境变量传递给脚本。比如说,假设/test/所指向的目录下只包括一个文件:here.html ,那么对/test/here.html/more和/test/nothere.html/more的请求都会将PATH_INFO环境变量设为"/more"。AcceptPathInfo指令的取值范围:Off
仅当一个请求映射到一个真实存在的路径时,才会被接受。这样,如上述/test/here.html/more这样在真实文件名后跟随一个路径名的请求将会返回一个"404 NOT FOUND"错误。
On
只要前导路径可以映射到一个真实存在的文件,就可以接受该请求。这样,只要上述/test/here.html能够映射到一个有效的文件,那么对/test/here.html/more的请求就会被接收。
Default
是否接收附带多余路径名信息的请求由其对应的处理器来决定。对应普通文本的核心处理器默认会拒绝PATH_INFO 。而用于伺服脚本的处理器,比如cgi-script和isapi-isa,默认会接受PATH_INFO 。
AcceptPathInfo指令存在的首要目的就是允许您覆盖处理器关于是否接受PATH_INFO的默认设置。这种覆盖是很必要的。比如说,当您使用 了类似INCLUDES这样的过滤器来根据PATH_INFO产生内容时。核心处理器通常会拒绝这样的请求,而您就可以用下述的配置使这样的脚本成为可 能:<Files "mypaths.shtml">
Options +Includes
SetOutputFilter INCLUDES
AcceptPathInfo On
</Files>AccessFileName 指令
说明 分布式配置文件的名字
语法 AccessFileName filename
默认值 AccessFileName .htaccess
作用域 server config, virtual host
状态 核心(C)
模块 core如果为某个目录启用了分布式配置文件功能,那么在向客户端返回其中的文档时,服务器将在这个文档所在的各级目录中查找此配置文件。比如:AccessFileName .acl在返回文档/usr/local/web/index.html之前,服务器会为此指令读取 /.acl 、/usr/.acl 、/usr/local/.acl 、/usr/local/web/.acl 除非此功能以被如下配置所禁用:<Directory />
AllowOverride None
</Directory>AddDefaultCharset 指令
说明 当应答内容是text/plain或text/html时,在HTTP应答头中加入的默认字符集
语法 AddDefaultCharset On|Off|charset
默认值 AddDefaultCharset Off
作用域 server config, virtual host, directory, .htaccess
覆盖项 FileInfo
状态 核心(C)
模块 core当且仅当应答内容是text/plain或text/html时,此指令将会在HTTP 应答头中加入的默认字符集。理论上这将覆盖在文档体中通过<meta>标签指定的字符集,但是实际的行为通常取决于用户浏览器的设置。 AddDefaultCharset Off 将会禁用此功能。AddDefaultCharset On 将启用Apache内部的默认字符集iso-8859-1 。您也可以指定使用在IANA注册过的字符集名字中的另外一个charset 。比如说:AddDefaultCharset utf-8AddDefaultCharset只应当在如下情况下使用:所有文本资源都使用同一种 确定的字符集,且分别标记他们的字符集非常麻烦。一个这样的例子是向包含动态内容的资源中添加字符集参数(比如先前遗留的CGI脚本),这样可能会因为在 输出中包含用户提供的数据而导致跨站点脚本攻击。但是请注意:更好的解决办法是修改或删除这些脚本,因为设置了默认的字符集以后将会使得浏览器的字符集自 动探测功能失效。AddOutputFilterByType 指令
说明 对特定的MIME类型指定输出过滤器
语法 AddOutputFilterByType filter[;filter...] MIME-type [MIME-type] ...
作用域 server config, virtual host, directory, .htaccess
覆盖项 FileInfo
状态 核心(C)
模块 core
兼容性 Apache 2.0.33 以后可用,但在Apache 2.1 以后反对使用此指令根据应答的MIME类型对请求激活特定的输出过滤器。由于下面将要讨论的问题,我们反对使用这个指令。同样的功能可以通过使用mod_filter模块获得。下例使用了由mod_deflate提供的DEFLATE过滤器。它将把所有以text/html或text/plain为标记的输出(不论静态或动态)在发送到客户端之前进行压缩。AddOutputFilterByType DEFLATE text/html text/plain如果您希望使用多个过滤器来处理内容,您可以用分号(;)来分隔它们的名字。并对每个过滤器使用AddOutputFilterByType指令。下述配置将使所有标记为text/html的脚本输出首先被INCLUDES过滤器处理后再被DEFLATE过滤器处理。<Location /cgi-bin/>
Options Includes
AddOutputFilterByType INCLUDES;DEFLATE text/html
</Location>注意
在某些情况下,用AddOutputFilterByType来使用过滤器会遭受部分或完全的失败。比如,如果MIME类型不能确定,那么将不会有过滤器加于其上,从而使之回到DefaultType的设置。甚至当DefaultType与其相同的时候也是这样。然而,如果您想确认对某些资源相关的内容类型确实使用了过滤器,您可以使用用诸如AddType或ForceTye这样的办法。在一个(non-nph)CGI脚本中设定内容类型也很安全。由类型决定的输出过滤器永远不会作用于来自代理的请求。AllowEncodedSlashes 指令
说明 确定是否允许URL中使用经过编码的路径分割符
语法 AllowEncodedSlashes On|Off
默认值 AllowEncodedSlashes Off
作用域 server config, virtual host
状态 核心(C)
模块 core
兼容性 仅在 Apache 2.0.46 及以后的版本中可用AllowEncodedSlashes指令允许使用包含经过编码的路径分割符的URL("%2F"→"/"或"%5C"→"\",取决于不同的系统)。默认情况下,这些URL将被一个包含"404"(未找到)错误的应答拒绝。AllowEncodedSlashes On 通常和PATH_INFO配合使用。注意
允许使用经过编码的斜线(路径分割符)并不意味着解码。%2F或%5C(仅仅取决于不同的系统)将会按原样出现在解码后的URL字符串中。AllowOverride 指令
说明 确定允许存在于.htaccess文件中的指令类型
语法 AllowOverride All|None|directive-type [directive-type] ...
默认值 AllowOverride All
作用域 directory
状态 核心(C)
模块 core当服务器发现一个.htaccess文件(由AccessFileName指定)时,它需要知道在这个文件中声明的哪些指令能覆盖在此之前指定的配置指令。仅允许存在于<Directory>配置段
AllowOverride仅在不包含正则表达式的<Directory>配置段中才是有效的。在<Location>, <DirectoryMatch>, <Files>配置段中都是无效的。
如果此指令被设置为None ,那么.htaccess文件将被完全忽略。事实上,服务器根本不会读取.htaccess文件。当此指令设置为 All时,所有具有".htaccess"作用域的指令都允许出现在.htaccess文件中。directive-type可以是下列各组指令之一:AuthConfig
允许使用与认证授权相关的指令(AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName, AuthType, AuthUserFile, Require, 等)。
FileInfo
允许使用控制文档类型的指令(DefaultType, ErrorDocument, ForceType, LanguagePriority, SetHandler, SetInputFilter, SetOutputFilter, mod_mime中的 Add* 和 Remove* 指令等等)、控制文档元数据的指令(Header, RequestHeader, SetEnvIf, SetEnvIfNoCase, BrowserMatch, CookieExpires, CookieDomain, CookieStyle, CookieTracking, CookieName)、mod_rewrite中的指令(RewriteEngine, RewriteOptions, RewriteBase, RewriteCond, RewriteRule)和mod_actions中的Action指令。
Indexes
允许使用控制目录索引的指令(AddDescription, AddIcon, AddIconByEncoding, AddIconByType, DefaultIcon, DirectoryIndex, FancyIndexing, HeaderName, IndexIgnore, IndexOptions, ReadmeName, 等)。
Limit
允许使用控制主机访问的指令(Allow, Deny, Order)。
Options[=Option,...]
允许使用控制指定目录功能的指令(Options和XBitHack)。可以在等号后面附加一个逗号分隔的(无空格的)Options选项列表,用来控制允许Options指令使用哪些选项。
例如以下指令只允许在.htaccess中使用AuthConfig和Indexes组的指令:AllowOverride AuthConfig Indexes不在这两组中的指令将会导致服务器产生一个内部错误。AuthName 指令
说明 用于HTTP认证的授权域
语法 AuthName auth-domain
作用域 directory, .htaccess
覆盖项 AuthConfig
状态 核心(C)
模块 core此指令为目录的授权域设置名字。此域将发送给客户端以使用户了解应当发送哪个用户名和密 码。AuthName指令带有一个参数。如果域的名字中包含空格,则必须用引号引起来。它必须与AuthType和Require指令以及诸如 AuthUserFile和AuthGroupFile这样的指令一起工作。例如:AuthName "Top Secret"提供给AuthName的字符串将出现在大多数浏览器提供的密码对话框中。AuthType 指令
说明 用户认证类型
语法 AuthType Basic|Digest
作用域 directory, .htaccess
覆盖项 AuthConfig
状态 核心(C)
模块 core此指令选择了一个目录的用户认证类型。目前只实现了Basic(mod_auth_basic)和Digest(mod_auth_digest)。要实现认证,还必须同时与AuthName和Require指令一起使用。另外,服务器还必须包含一个认证支持模块(比如mod_authn_file)和一个授权支持模块(比如mod_authz_user)。CGIMapExtension 指令
说明 定位CGI脚本解释器
语法 CGIMapExtension cgi-path .extension
作用域 directory, .htaccess
覆盖项 FileInfo
状态 核心(C)
模块 core
兼容性 NetWare only此指令用于定位Apache CGI脚本解释器。比如,"CGIMapExtension sys:\foo.nlm .foo"将把所有具有.foo后缀的CGI脚本文件传递给FOO解释器。ContentDigest 指令
说明 允许生成Content-MD5应答头
语法 ContentDigest On|Off
默认值 ContentDigest Off
作用域 server config, virtual host, directory, .htaccess
覆盖项 Options
状态 核心(C)
模块 core此指令遵照RFC1854和RFC2068协议的定义启用了Content-MD5应答头的生成。MD5是一种为不定长度的数据计算出一个"消息摘要"(有时也称为"指纹")的算法。并且保证数据中的任何变化都会反应在消息摘要的变化中。Content-MD5头提供了一种端到端的针对整个消息体的信息完整性检查方法。代理或者客户端会检查此头以侦测在传输过程中,消息体是否产生了意外的改变。一个头的例子如下:Content-MD5: AuLb7Dp1rqtRtxz2m9kRpA==请注意,因为对每个请求都要进行消息摘要的运算(没有对其值进行缓存),所以这会对您的服务器造成性能方面的影响。Content-MD5仅为由Apache核心伺服的文档进行发送,而对于由模块处理的文档则不予理会。比如说SSI文档、CGI脚本的输出、字节范围的应答都不包括这个头。DefaultType 指令
说明 在服务器无法由其他方法确定内容类型时,发送的默认MIME内容类型
语法 DefaultType MIME-type
默认值 DefaultType text/plain
作用域 server config, virtual host, directory, .htaccess
覆盖项 FileInfo
状态 核心(C)
模块 core有时会发生这样的事:服务器会被要求提供一个文档,而这个文档的类型无法由它的MIME类型映射所决定。服务器必须通知客户端其文档的内容类型。所以当一个未知类型出现时,将会使用DefaultType 。例如:DefaultType image/gif这样的配置对于里面有很多gif图片而有些在文件名中缺少.gif扩展名的目录非常合适。注意,与ForceType指令的不同之处在于:此指令仅提供了默认的mime类型。所有其它mime类型的定义,包括文件的扩展名,或其它可以标识媒体类型的方法都会覆盖此默认值。<Directory> 指令
说明 封装一组指令,使之仅对文件空间中的某个目录及其子目录生效
语法 <Directory directory-path> ... </Directory>
作用域 server config, virtual host
状态 核心(C)
模块 core<Directory>和</Directory>用于封装一 组指令,使之仅对某个目录及其子目录生效。任何可以在"directory"作用域中使用的指令都可以使用。Directory-path可以是一个目录 的完整路径,或是包含了Unix shell匹配语法的通配符字符串。在通配符字符串中,"?"匹配任何单个的字符,"*"匹配任何字符序列。您也可以使用"[]"来确定字符范围。以上通 配符都不能匹配"/"字符。所以<Directory /*/public_html>将无法匹配/home/user/public_html ,但<Directory /home/*/public_html>能够正确匹配。比如说:<Directory /usr/local/httpd/htdocs>
Options Indexes FollowSymLinks
</Directory>使用directory-path参数的时候要注意:它们必须与Apache用于访问文件的文件系统路径保持一致。赋予特定<Directory>的指令将无法对通过不同路径指向的同一个目录文件生效,比如说通过另外一个符号连接生成的路径。扩展的正则表达式也可以通过附加一个"~"字符来使用。比如说:<Directory ~ "^/www/(.+/)*[0-9]{3}">将匹配/www/下所有由3个数字组成的目录。如果有多个(非正则表达式)<Directory>配置段符合包含某文档的目录(或其父目录),那么指令将以短目录优先的规则进行应用。并包含.htaccess文件中的指令。比如说在<Directory />
AllowOverride None
</Directory><Directory /home/>
AllowOverride FileInfo
</Directory>中,访问文档/home/web/dir/doc.html的步骤如下:应用指令AllowOverride None(禁用.htaccess文件)。
应用指令AllowOverride FileInfo(针对/home目录)。
按顺序应用所有/home/.htaccess 、/home/web/.htaccess 、/home/web/dir/.htaccess中的FileInfo组指令。
正则表达式将在所有普通配置段之后予以考虑。所有的正则表达式将根据它们出现在配置文件中的顺序进行应用。比如说,以下配置:<Directory ~ abc$>
# ......
</Directory>正则表达式配置段将在所有普通的<Directory>和.htaccess文件应用之后才予以考虑。所以正则表达式将匹配/home/abc/public_html/abc并予以应用。请注意:Apache对<Directory />的默认访问权限为"Allow from All"。这意味着Apache将伺服任何通过URL映射的文件。我们建议您将这个配置做如下屏蔽:<Directory />
Order Deny,Allow
Deny from All
</Directory>然后在您想要使之被访问的目录中覆盖此配置。参阅安全提示以获取更多详情。一般来说<Directory>指令只会出现在httpd.conf文件 中,但它们也可能出现在任何其它配置文件中。<Directory>指令不可被嵌套使用,也不能出现在<Limit> 或<LimitExcept>配置段中。<DirectoryMatch> 指令
说明 封装一些指令并作用于文件系统中匹配正则表达式的所有目录及其子目录
语法 <DirectoryMatch regex> ... </DirectoryMatch>
作用域 server config, virtual host
状态 核心(C)
模块 core<DirectoryMatch>和</DirectoryMatch>用于封装一组指令。与<Directory>类似,此指令将仅作用于指定名字的目录及其子目录。然而,它可以接受一个正则表达式作为参数。比如说:<DirectoryMatch "^/www/(.+/)*[0-9]{3}">将匹配/www/下所有由3个数字组成的目录。DocumentRoot 指令
说明 组成网络上可见的主文档树的根目录
语法 DocumentRoot directory-path
默认值 DocumentRoot /usr/local/apache2/htdocs
作用域 server config, virtual host
状态 核心(C)
模块 core此指令设置了httpd伺服的目录。在没有使用类似Alias这样的指令的情况下,服务器会将请求中的URL附加到DocumentRoot后面以构成指向文档的路径。比如说:DocumentRoot /usr/web于是对http://www.my.host.com/index.html的访问就会指向/usr/web/index.html 。如果directory-path不是绝对路径,则被假定为是相对于ServerRoot的路径。指定DocumentRoot时不应包括最后的"/"。
说明 根据协议类型对监听Socket进行优化
语法 AcceptFilter protocol accept_filter
作用域 server config
状态 核心(C)
模块 core
兼容性 仅在 Apache 2.1.5 以后的版本中可用这个指令使得操作系统根据协议类型对监听socket进行特别的优化。其基本前提是内核 在数据接受完毕或一个完整的HTTP请求缓冲完成前不向服务器进程发送socket 。目前仅支持FreeBSD的接收过滤器(Accept Filter)和Linux的更原始的(more primitive)TCP_DEFER_ACCEPT 。FreeBSD上的默认值是:AcceptFilter http httpready
AcceptFilter https datareadyhttpready接收过滤器(Accept Filter)在内核级别缓冲整个HTTP请求。一旦一个请求体被完整接收,内核将把它发送给服务器。参见accf_http(9)手册页以获得更详细的 信息。因为HTTPS请求已经被加密了,所以只了accf_data(9)过滤器。Linux上的默认值是:AcceptFilter http data
AcceptFilter https dataLinux的TCP_DEFER_ACCEPT并不支持对http请求进行缓冲。除none之外的任何值都将在监听程序上启用TCP_DEFER_ACCEPT 。参见tcp(7)手册页以获得更多详情。使用none将会为那个协议禁用接收过滤器(accept filter)。这对于像nntp这样需要服务器先发送数据的协议很有用处:AcceptFilter nttp noneAcceptPathInfo 指令
说明 是否接受附带多余路径名信息的请求
语法 AcceptPathInfo On|Off|Default
默认值 AcceptPathInfo Default
作用域 server config, virtual host, directory, .htaccess
覆盖项 FileInfo
状态 核心(C)
模块 core
兼容性 仅在 Apache 2.0.30 及以后的版本中可用此指令决定是否接受在实际名(或实际目录中一个不存在的)后跟随多余路径名信息的请求。这个多余的路径名信息可以当作PATH_INFO环境变量传递给脚本。比如说,假设/test/所指向的目录下只包括一个文件:here.html ,那么对/test/here.html/more和/test/nothere.html/more的请求都会将PATH_INFO环境变量设为"/more"。AcceptPathInfo指令的取值范围:Off
仅当一个请求映射到一个真实存在的路径时,才会被接受。这样,如上述/test/here.html/more这样在真实文件名后跟随一个路径名的请求将会返回一个"404 NOT FOUND"错误。
On
只要前导路径可以映射到一个真实存在的文件,就可以接受该请求。这样,只要上述/test/here.html能够映射到一个有效的文件,那么对/test/here.html/more的请求就会被接收。
Default
是否接收附带多余路径名信息的请求由其对应的处理器来决定。对应普通文本的核心处理器默认会拒绝PATH_INFO 。而用于伺服脚本的处理器,比如cgi-script和isapi-isa,默认会接受PATH_INFO 。
AcceptPathInfo指令存在的首要目的就是允许您覆盖处理器关于是否接受PATH_INFO的默认设置。这种覆盖是很必要的。比如说,当您使用 了类似INCLUDES这样的过滤器来根据PATH_INFO产生内容时。核心处理器通常会拒绝这样的请求,而您就可以用下述的配置使这样的脚本成为可 能:<Files "mypaths.shtml">
Options +Includes
SetOutputFilter INCLUDES
AcceptPathInfo On
</Files>AccessFileName 指令
说明 分布式配置文件的名字
语法 AccessFileName filename
默认值 AccessFileName .htaccess
作用域 server config, virtual host
状态 核心(C)
模块 core如果为某个目录启用了分布式配置文件功能,那么在向客户端返回其中的文档时,服务器将在这个文档所在的各级目录中查找此配置文件。比如:AccessFileName .acl在返回文档/usr/local/web/index.html之前,服务器会为此指令读取 /.acl 、/usr/.acl 、/usr/local/.acl 、/usr/local/web/.acl 除非此功能以被如下配置所禁用:<Directory />
AllowOverride None
</Directory>AddDefaultCharset 指令
说明 当应答内容是text/plain或text/html时,在HTTP应答头中加入的默认字符集
语法 AddDefaultCharset On|Off|charset
默认值 AddDefaultCharset Off
作用域 server config, virtual host, directory, .htaccess
覆盖项 FileInfo
状态 核心(C)
模块 core当且仅当应答内容是text/plain或text/html时,此指令将会在HTTP 应答头中加入的默认字符集。理论上这将覆盖在文档体中通过<meta>标签指定的字符集,但是实际的行为通常取决于用户浏览器的设置。 AddDefaultCharset Off 将会禁用此功能。AddDefaultCharset On 将启用Apache内部的默认字符集iso-8859-1 。您也可以指定使用在IANA注册过的字符集名字中的另外一个charset 。比如说:AddDefaultCharset utf-8AddDefaultCharset只应当在如下情况下使用:所有文本资源都使用同一种 确定的字符集,且分别标记他们的字符集非常麻烦。一个这样的例子是向包含动态内容的资源中添加字符集参数(比如先前遗留的CGI脚本),这样可能会因为在 输出中包含用户提供的数据而导致跨站点脚本攻击。但是请注意:更好的解决办法是修改或删除这些脚本,因为设置了默认的字符集以后将会使得浏览器的字符集自 动探测功能失效。AddOutputFilterByType 指令
说明 对特定的MIME类型指定输出过滤器
语法 AddOutputFilterByType filter[;filter...] MIME-type [MIME-type] ...
作用域 server config, virtual host, directory, .htaccess
覆盖项 FileInfo
状态 核心(C)
模块 core
兼容性 Apache 2.0.33 以后可用,但在Apache 2.1 以后反对使用此指令根据应答的MIME类型对请求激活特定的输出过滤器。由于下面将要讨论的问题,我们反对使用这个指令。同样的功能可以通过使用mod_filter模块获得。下例使用了由mod_deflate提供的DEFLATE过滤器。它将把所有以text/html或text/plain为标记的输出(不论静态或动态)在发送到客户端之前进行压缩。AddOutputFilterByType DEFLATE text/html text/plain如果您希望使用多个过滤器来处理内容,您可以用分号(;)来分隔它们的名字。并对每个过滤器使用AddOutputFilterByType指令。下述配置将使所有标记为text/html的脚本输出首先被INCLUDES过滤器处理后再被DEFLATE过滤器处理。<Location /cgi-bin/>
Options Includes
AddOutputFilterByType INCLUDES;DEFLATE text/html
</Location>注意
在某些情况下,用AddOutputFilterByType来使用过滤器会遭受部分或完全的失败。比如,如果MIME类型不能确定,那么将不会有过滤器加于其上,从而使之回到DefaultType的设置。甚至当DefaultType与其相同的时候也是这样。然而,如果您想确认对某些资源相关的内容类型确实使用了过滤器,您可以使用用诸如AddType或ForceTye这样的办法。在一个(non-nph)CGI脚本中设定内容类型也很安全。由类型决定的输出过滤器永远不会作用于来自代理的请求。AllowEncodedSlashes 指令
说明 确定是否允许URL中使用经过编码的路径分割符
语法 AllowEncodedSlashes On|Off
默认值 AllowEncodedSlashes Off
作用域 server config, virtual host
状态 核心(C)
模块 core
兼容性 仅在 Apache 2.0.46 及以后的版本中可用AllowEncodedSlashes指令允许使用包含经过编码的路径分割符的URL("%2F"→"/"或"%5C"→"\",取决于不同的系统)。默认情况下,这些URL将被一个包含"404"(未找到)错误的应答拒绝。AllowEncodedSlashes On 通常和PATH_INFO配合使用。注意
允许使用经过编码的斜线(路径分割符)并不意味着解码。%2F或%5C(仅仅取决于不同的系统)将会按原样出现在解码后的URL字符串中。AllowOverride 指令
说明 确定允许存在于.htaccess文件中的指令类型
语法 AllowOverride All|None|directive-type [directive-type] ...
默认值 AllowOverride All
作用域 directory
状态 核心(C)
模块 core当服务器发现一个.htaccess文件(由AccessFileName指定)时,它需要知道在这个文件中声明的哪些指令能覆盖在此之前指定的配置指令。仅允许存在于<Directory>配置段
AllowOverride仅在不包含正则表达式的<Directory>配置段中才是有效的。在<Location>, <DirectoryMatch>, <Files>配置段中都是无效的。
如果此指令被设置为None ,那么.htaccess文件将被完全忽略。事实上,服务器根本不会读取.htaccess文件。当此指令设置为 All时,所有具有".htaccess"作用域的指令都允许出现在.htaccess文件中。directive-type可以是下列各组指令之一:AuthConfig
允许使用与认证授权相关的指令(AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName, AuthType, AuthUserFile, Require, 等)。
FileInfo
允许使用控制文档类型的指令(DefaultType, ErrorDocument, ForceType, LanguagePriority, SetHandler, SetInputFilter, SetOutputFilter, mod_mime中的 Add* 和 Remove* 指令等等)、控制文档元数据的指令(Header, RequestHeader, SetEnvIf, SetEnvIfNoCase, BrowserMatch, CookieExpires, CookieDomain, CookieStyle, CookieTracking, CookieName)、mod_rewrite中的指令(RewriteEngine, RewriteOptions, RewriteBase, RewriteCond, RewriteRule)和mod_actions中的Action指令。
Indexes
允许使用控制目录索引的指令(AddDescription, AddIcon, AddIconByEncoding, AddIconByType, DefaultIcon, DirectoryIndex, FancyIndexing, HeaderName, IndexIgnore, IndexOptions, ReadmeName, 等)。
Limit
允许使用控制主机访问的指令(Allow, Deny, Order)。
Options[=Option,...]
允许使用控制指定目录功能的指令(Options和XBitHack)。可以在等号后面附加一个逗号分隔的(无空格的)Options选项列表,用来控制允许Options指令使用哪些选项。
例如以下指令只允许在.htaccess中使用AuthConfig和Indexes组的指令:AllowOverride AuthConfig Indexes不在这两组中的指令将会导致服务器产生一个内部错误。AuthName 指令
说明 用于HTTP认证的授权域
语法 AuthName auth-domain
作用域 directory, .htaccess
覆盖项 AuthConfig
状态 核心(C)
模块 core此指令为目录的授权域设置名字。此域将发送给客户端以使用户了解应当发送哪个用户名和密 码。AuthName指令带有一个参数。如果域的名字中包含空格,则必须用引号引起来。它必须与AuthType和Require指令以及诸如 AuthUserFile和AuthGroupFile这样的指令一起工作。例如:AuthName "Top Secret"提供给AuthName的字符串将出现在大多数浏览器提供的密码对话框中。AuthType 指令
说明 用户认证类型
语法 AuthType Basic|Digest
作用域 directory, .htaccess
覆盖项 AuthConfig
状态 核心(C)
模块 core此指令选择了一个目录的用户认证类型。目前只实现了Basic(mod_auth_basic)和Digest(mod_auth_digest)。要实现认证,还必须同时与AuthName和Require指令一起使用。另外,服务器还必须包含一个认证支持模块(比如mod_authn_file)和一个授权支持模块(比如mod_authz_user)。CGIMapExtension 指令
说明 定位CGI脚本解释器
语法 CGIMapExtension cgi-path .extension
作用域 directory, .htaccess
覆盖项 FileInfo
状态 核心(C)
模块 core
兼容性 NetWare only此指令用于定位Apache CGI脚本解释器。比如,"CGIMapExtension sys:\foo.nlm .foo"将把所有具有.foo后缀的CGI脚本文件传递给FOO解释器。ContentDigest 指令
说明 允许生成Content-MD5应答头
语法 ContentDigest On|Off
默认值 ContentDigest Off
作用域 server config, virtual host, directory, .htaccess
覆盖项 Options
状态 核心(C)
模块 core此指令遵照RFC1854和RFC2068协议的定义启用了Content-MD5应答头的生成。MD5是一种为不定长度的数据计算出一个"消息摘要"(有时也称为"指纹")的算法。并且保证数据中的任何变化都会反应在消息摘要的变化中。Content-MD5头提供了一种端到端的针对整个消息体的信息完整性检查方法。代理或者客户端会检查此头以侦测在传输过程中,消息体是否产生了意外的改变。一个头的例子如下:Content-MD5: AuLb7Dp1rqtRtxz2m9kRpA==请注意,因为对每个请求都要进行消息摘要的运算(没有对其值进行缓存),所以这会对您的服务器造成性能方面的影响。Content-MD5仅为由Apache核心伺服的文档进行发送,而对于由模块处理的文档则不予理会。比如说SSI文档、CGI脚本的输出、字节范围的应答都不包括这个头。DefaultType 指令
说明 在服务器无法由其他方法确定内容类型时,发送的默认MIME内容类型
语法 DefaultType MIME-type
默认值 DefaultType text/plain
作用域 server config, virtual host, directory, .htaccess
覆盖项 FileInfo
状态 核心(C)
模块 core有时会发生这样的事:服务器会被要求提供一个文档,而这个文档的类型无法由它的MIME类型映射所决定。服务器必须通知客户端其文档的内容类型。所以当一个未知类型出现时,将会使用DefaultType 。例如:DefaultType image/gif这样的配置对于里面有很多gif图片而有些在文件名中缺少.gif扩展名的目录非常合适。注意,与ForceType指令的不同之处在于:此指令仅提供了默认的mime类型。所有其它mime类型的定义,包括文件的扩展名,或其它可以标识媒体类型的方法都会覆盖此默认值。<Directory> 指令
说明 封装一组指令,使之仅对文件空间中的某个目录及其子目录生效
语法 <Directory directory-path> ... </Directory>
作用域 server config, virtual host
状态 核心(C)
模块 core<Directory>和</Directory>用于封装一 组指令,使之仅对某个目录及其子目录生效。任何可以在"directory"作用域中使用的指令都可以使用。Directory-path可以是一个目录 的完整路径,或是包含了Unix shell匹配语法的通配符字符串。在通配符字符串中,"?"匹配任何单个的字符,"*"匹配任何字符序列。您也可以使用"[]"来确定字符范围。以上通 配符都不能匹配"/"字符。所以<Directory /*/public_html>将无法匹配/home/user/public_html ,但<Directory /home/*/public_html>能够正确匹配。比如说:<Directory /usr/local/httpd/htdocs>
Options Indexes FollowSymLinks
</Directory>使用directory-path参数的时候要注意:它们必须与Apache用于访问文件的文件系统路径保持一致。赋予特定<Directory>的指令将无法对通过不同路径指向的同一个目录文件生效,比如说通过另外一个符号连接生成的路径。扩展的正则表达式也可以通过附加一个"~"字符来使用。比如说:<Directory ~ "^/www/(.+/)*[0-9]{3}">将匹配/www/下所有由3个数字组成的目录。如果有多个(非正则表达式)<Directory>配置段符合包含某文档的目录(或其父目录),那么指令将以短目录优先的规则进行应用。并包含.htaccess文件中的指令。比如说在<Directory />
AllowOverride None
</Directory><Directory /home/>
AllowOverride FileInfo
</Directory>中,访问文档/home/web/dir/doc.html的步骤如下:应用指令AllowOverride None(禁用.htaccess文件)。
应用指令AllowOverride FileInfo(针对/home目录)。
按顺序应用所有/home/.htaccess 、/home/web/.htaccess 、/home/web/dir/.htaccess中的FileInfo组指令。
正则表达式将在所有普通配置段之后予以考虑。所有的正则表达式将根据它们出现在配置文件中的顺序进行应用。比如说,以下配置:<Directory ~ abc$>
# ......
</Directory>正则表达式配置段将在所有普通的<Directory>和.htaccess文件应用之后才予以考虑。所以正则表达式将匹配/home/abc/public_html/abc并予以应用。请注意:Apache对<Directory />的默认访问权限为"Allow from All"。这意味着Apache将伺服任何通过URL映射的文件。我们建议您将这个配置做如下屏蔽:<Directory />
Order Deny,Allow
Deny from All
</Directory>然后在您想要使之被访问的目录中覆盖此配置。参阅安全提示以获取更多详情。一般来说<Directory>指令只会出现在httpd.conf文件 中,但它们也可能出现在任何其它配置文件中。<Directory>指令不可被嵌套使用,也不能出现在<Limit> 或<LimitExcept>配置段中。<DirectoryMatch> 指令
说明 封装一些指令并作用于文件系统中匹配正则表达式的所有目录及其子目录
语法 <DirectoryMatch regex> ... </DirectoryMatch>
作用域 server config, virtual host
状态 核心(C)
模块 core<DirectoryMatch>和</DirectoryMatch>用于封装一组指令。与<Directory>类似,此指令将仅作用于指定名字的目录及其子目录。然而,它可以接受一个正则表达式作为参数。比如说:<DirectoryMatch "^/www/(.+/)*[0-9]{3}">将匹配/www/下所有由3个数字组成的目录。DocumentRoot 指令
说明 组成网络上可见的主文档树的根目录
语法 DocumentRoot directory-path
默认值 DocumentRoot /usr/local/apache2/htdocs
作用域 server config, virtual host
状态 核心(C)
模块 core此指令设置了httpd伺服的目录。在没有使用类似Alias这样的指令的情况下,服务器会将请求中的URL附加到DocumentRoot后面以构成指向文档的路径。比如说:DocumentRoot /usr/web于是对http://www.my.host.com/index.html的访问就会指向/usr/web/index.html 。如果directory-path不是绝对路径,则被假定为是相对于ServerRoot的路径。指定DocumentRoot时不应包括最后的"/"。
顶(0)
踩(0)
- 最新评论