apache配置<Files> <FilesMatch> <Location><LocationMatch>指令

apache配置 指令
指令

说明 包含作用于匹配指定文件名的指令
语法 …
作用域 server config, virtual host, directory, .htaccess
覆盖项 All
状态 核心©
模块 core

指令提供了基于文件名的访问控制,类似于和指令。它将配对一个指令。在此配置段中定义的指令将作用于其基本名称(不是完整的路径)与指定的文件名相符的对象。段将根据它们在配置文件中出现的顺序被处理:在段和.htaccess文件被处理之后,但在段之前。请注意:能嵌入到段中以限制它们作用的文件系统范围。

filename参数应当是一个文件名或是一个包含通配符的字符串,其中"?“匹配任何单个字符,”*“匹配任何字符串序列。在”~"字符之后同样可以使用正则表达式。比如:

<Files ~ “.(gif|jpe?g|png)$”>

将匹配绝大部分常见的因特网图象格式。然而在Apache1.3及其后继版本中,更推荐使用指令。

请注意与和配置段不同的是:配置段可用于.htaccess文件当中。这将允许用户在文件层面上控制对它们自己文件的访问。

指令

说明 包含作用于与正则表达式匹配的文件名的指令
语法 …
作用域 server config, virtual host, directory, .htaccess
覆盖项 All
状态 核心©
模块 core

指令就像指令一样提供了针对文件名的访问控制。然而,它使用的是正则表达式。比如说:

<FilesMatch “.(gif|jpe?g|png)$”>

将匹配最常见的internet图形文件格式。

Include 指令

说明 在服务器配置文件中包含其它配置文件
语法 Include file-path|directory-path
作用域 server config, virtual host, directory
状态 核心©
模块 core
兼容性 通配符仅在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

指令

说明 将封装的指令作用于匹配的URL
语法 <Location URL-path|URL> …
作用域 server config, virtual host
状态 核心©
模块 core

提供了基于URL的访问控制。与指令类似,它也会启用一个以结尾的配置段。配置段的处理位于, .htaccess, 之后,并依照在配置文件中出现的顺序进行处理。

配置段完全独立于文件系统之外操作。这有几个重要的后果。最重要的是不能用于针对文件系统的访问控制。因为可能会有几个不同的URL指向文件系统中的同一个文件,所以这样的控制常常会被很容易的绕过。
何时使用?

使用来将指令应用于独立于文件系统之外的内容。文件系统之内的内容请使用和指令。不过一个例外是 ,它可以方便的作用于所用URL。

对所有的原始(非代理)请求来说,匹配的URL应该是具有"/path/"形式的URL路径。不包括访问方法、主机名、端口或查询字符串等。对于代理的请求,匹配的URL必须为"scheme://servername/path"的形式,而且必须包括前缀。

URL可以用一个通配符字符串来进行通配符的处理。"?“匹配任何单个的字符,而”*"匹配所有字符序列。

也可以附加"~"字符来表示使用正则表达式。例如:

<Location ~ “/(extra|special)/data”>

将匹配所有包含字符串"/extra/data"或"/special/data"的URL。在Apache1.3及其后续版本中,加入了一个新的推荐使用的指令,其功能与的正则表达式版本相同。

的功能在与SetHandler指令联用时能发挥最大效能。比如启用状态请求,但仅对来自foo.com的用户起效,您可以这样使用:

<Location /status>
SetHandler server-status
Order Deny,Allow
Deny from all
Allow from .foo.com

请注意"/"(斜线)

斜线字符根据它在URL中出现的位置不同有着特殊的意义。大家可能都已经习惯在文件系统中,多个连续的斜线会被作为单一的斜线处理(例如"/home ///foo"与"/home/foo"相同)。但在URL里面,这样是行不通的。指令和正则表达式版本的要求您明确使用多重斜线。比如:<LocationMatch ^/abc>将匹配请求"/abc"但不会匹配请求"//abc"。而非正则表达式版本的指令在用于代理请求时,也有类似表现。但当非正则表达式版本的作用于非代理请求时,它会将多个毗邻的斜线认作单个斜线。比如,如果您指定了<Location /abc/def>而请求是指向"/abc//def"的,那么它们就是匹配的。

指令

说明 将封装的指令作用于正则表达式匹配的URL
语法 …
作用域 server config, virtual host
状态 核心©
模块 core

和指令相同,提供了基于URL的访问控制。但它使用正则表达式作为参数,而不是简单字符串。比如:

<LocationMatch “/(extra|special)/data”>

将匹配包含子串"/extra/data"或"/special/data"的URL。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yueyecheshou1980

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值