文件说明
描述包含匹配指定文件名的指令。
Syntax file file name ./file
Scope server configuration, virtual host, directory, htaccess
覆盖项目全部
国家核心(c)
模块核心
Files指令提供基于文件名的访问控制,类似于目录和位置指令。它将与/Files命令成对出现。
此配置部分中定义的指令将作用于基本名称(非完整路径)与指定文件名匹配的对象。文件段将按照它们在配置文件中出现的顺序进行处理:在目录段和之后。处理htaccess文件,
但是在位置部分之前。请注意:文件可以嵌入到目录段中,以限制其文件系统的范围。
filename参数应该是文件名或包含通配符的字符串,其中“?”匹配任何单个字符,而“*”匹配任何字符串序列。在“~”字符后也可以使用正则表达式。例如:
Files ~ '\.(gif|jpe?g|png)$'
它将匹配最常见的互联网图像格式。但在Apache1.3及其后续版本中,更推荐使用FilesMatch指令。
请注意,与目录和位置配置段不同,文件配置段可用于。htaccess文件。这将允许用户在文件级别控制对他们自己的文件的访问。
File matching instruction
描述包含对匹配正则表达式的文件名起作用的指令。
Grammar files match regular expressions . /FilesMatch
Scope server configuration, virtual host, directory, htaccess
覆盖项目全部
国家核心(c)
模块核心
FilesMatch指令为文件名提供访问控制,就像Files指令一样。但是,它使用正则表达式。例如:
FilesMatch '\.(gif|jpe?g|png)$'
将匹配最常见的互联网图形文件格式。
Include instructions
说明服务器配置文件中包含其他配置文件。
Syntax contains file path | directory path
Scope Server Configuration, Virtual Host, Directory
国家核心(c)
模块核心
兼容性通配符仅在Apache 2.0.41和更高版本中可用。
该指令允许将其他配置文件添加到服务器配置文件中。
Shell风格(fnmatch())的通配符可以用于按照字母顺序一次包含多个文件。另外,如果Include指向了一个目录而不是一个文件,Apache将读入该目录及其子目录下的所有文件,
并依照字母顺序将这些文件作为配置文件进行解析。但是并不推荐这么做,因为偶尔会有临时文件在这个目录中生成,从而导致httpd启动失败。
文件的路径可以是一个完整的绝对路径(以一个斜杠开头):
Include /usr/local/apache2/conf/ssl.conf
Include /usr/local/apache2/conf/vhosts/*.conf
或是相对于ServerRoot目录的相对路径:
Include conf/ssl.conf
Include conf/vhosts/*.conf
请确保包含的目录中不包含任何诸如编辑器临时文件等引起误导的文件,因为Apache会尝试读取它们并把其中的内容作为配置指令来处理,这样可能会导致启动过程的失败。
运行apachectl configtest将会把配置检查时所使用的所有文件列出来以供参考。这将有助于检验配置中是否仅包含了您所希望出现那些文件。
root@host# apachectl configtest
Processing config file: /usr/local/apache2/conf/ssl.conf
Processing config file: /usr/local/apache2/conf/vhosts/vhost1.conf
Processing config file: /usr/local/apache2/conf/vhosts/vhost2.conf
Syntax OK
Location指令
说明 将封装的指令作用于匹配的URL
语法 Location URL-path|URL . /Location
作用域 server config, virtual host
状态 核心(C)
模块 core
Location提供了基于URL的访问控制。与Directory指令类似,它也会启用一个以/Location结尾的配置段。
Location配置段的处理位于Directory,htaccess, Files之后,并依照在配置文件中出现的顺序进行处理。
Location配置段完全独立于文件系统之外操作。这有几个重要的后果。最重要的是Location不能用于针对文件系统的访问控制。因为可能会有几个不同的URL指向文件系统中的同一个文件,
所以这样的控制常常会被很容易的绕过。
何时使用Location?
使用Location来将指令应用于独立于文件系统之外的内容。文件系统之内的内容请使用Directory和Files指令。不过一个例外是Location /,它可以方便的作用于所用URL。
对所有的原始(非代理)请求来说,匹配的URL应该是具有'/path/'形式的URL路径。不包括访问方法、主机名、端口或查询字符串等。对于代理的请求,
匹配的URL必须为'scheme://servername/path'的形式,而且必须包括前缀。
URL可以用一个通配符字符串来进行通配符的处理。'?'匹配任何单个的字符,而'*'匹配所有字符序列。
也可以附加'~'字符来表示使用正则表达式。例如:
Location ~ '/(extra|special)/data'
将匹配所有包含字符串'/extra/data'或'/special/data'的URL。在Apache1.3及其后续版本中,加入了一个新的推荐使用的LocationMatch指令,
其功能与Location的正则表达式版本相同。
Location的功能在与SetHandler指令联用时能发挥最大效能。比如启用状态请求,但仅对来自foo.com的用户起效,您可以这样使用:
Location /status
SetHandler server-status
Order Deny,Allow
Deny from all
Allow from .foo.com
/Location
请注意'/'(斜线)
斜线字符根据它在URL中出现的位置不同有着特殊的意义。大家可能都已经习惯在文件系统中,多个连续的斜线会被作为单一的斜线处理(例如'/home ///foo'与'/home/foo'相同)。
但在URL里面,这样是行不通的。LocationMatch指令和正则表达式版本的Location要求您明确使用多重斜线。
比如:LocationMatch ^/abc将匹配请求'/abc'但不会匹配请求'//abc'。而非正则表达式版本的Location指令在用于代理请求时,也有类似表现。
但当非正则表达式版本的Location作用于非代理请求时,它会将多个毗邻的斜线认作单个斜线。比如,如果您指定了Location /abc/def而请求是指向'/abc//def'的,
那么它们就是匹配的。
LocationMatch指令
说明 将封装的指令作用于正则表达式匹配的URL
语法 LocationMatch regex . /LocationMatch
作用域 server config, virtual host
状态 核心(C)
模块 core
LocationMatch和Location指令相同,提供了基于URL的访问控制。但它使用正则表达式作为参数,而不是简单字符串。比如:
LocationMatch '/(extra|special)/data'
将匹配包含子串'/extra/data'或'/special/data'的URL。