• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • <Location> 指令

    描述:仅将随附的指令应用于匹配的URL
    句法:<Location URL-path|URL>...</Location>
    内容:服务器配置,虚拟主机
    状态:核心
    模组:核心

    <Location>指令通过URL限制了随附指令的范围。它与<Directory>指令相似,并以该指令开始的子节开始</Location><Location>在读取<Directory>节和.htaccess文件之后以及节之后,将按照节在配置文件中出现的顺序处理<Files>节。

    <Location>部分完全在文件系统外部运行。这有几个后果。最重要的是,<Location>不应使用指令来控制对文件系统位置的访问。由于几个不同的URL可能映射到相同的文件系统位置,因此可以规避此类访问控制。

    如果URL的路径部分满足以下一条件,则将随附的指令应用于请求:

    • 指定的位置与URL的路径部分完全匹配。
    • 以反斜杠结尾的指定位置是URL路径部分的前缀(视为上下文根)。
    • 指定的位置加上结尾的斜杠,是URL路径部分的前缀(也视为上下文根)。

    在下面的示例中,在不使用尾部斜杠的情况下,对/ private1,/ private1 /和/private1/file.txt的请求将应用随附的指令,而/ private1other则不使用。

    <Location "/private1">
        #  ...
    </Location>
    

    在下面的示例中,使用尾部斜杠,对/ private2 /和/private2/file.txt的请求将应用随附的指令,而/ private2和/ private2other则不包含。

    <Location "/private2/">
        # ...
    </Location>
    

    何时使用<Location>

    使用<Location>的文件系统之外的指令适用于内容的生活。对于文件系统中的内容,请使用<Directory><Files>。例外是<Location "/">,这是将配置应用于整个服务器的简便方法。

    对于所有原始(非代理)请求,要匹配的URL是形式为的URL路径/path/不得包含方案,主机名,端口或查询字符串。对于代理请求,要匹配的URL格式为scheme://servername/path,并且必须包含前缀。

    该URL可以使用通配符。在通配符字符串中,?匹配任何单个字符,并且*匹配任何字符序列。这两个通配符都不匹配URL路径中的/。

    ~字符外,还可以使用正则表达式。例如:

    <Location ~ "/(extra|special)/data">
        #...
    </Location>
    

    将匹配包含子字符串/extra/data或的URL /special/data。该指令的<LocationMatch>行为与的regex版本相同<Location>,因此是首选参数,原因~很简单,很难-在许多字体中将其区别出来。

    <Location>SetHandler指令结合使用时,此功能特别有用。例如,要启用状态请求但仅允许来自浏览器的状态请求example.com,可以使用:

    <Location "/status">
      SetHandler server-status
      Require host example.com
    </Location>
    

    关于/(斜线)的注释

    斜杠字符有特殊的含义,具体取决于它在URL中出现的位置。人们可能习惯于文件系统中多个相邻斜杠经常折叠为单个斜杠(/home///foo与相同/home/foo)的行为。在URL空间中,这不一定是正确的。该<LocationMatch>指令和正则表达式版本<Location>要求你明确指定多个斜线,如果这是你的意图。

    例如,<LocationMatch "^/abc">将匹配请求URL /abc而不匹配请求URL //abc<Location>当用于代理请求时,(非正则表达式)指令的行为类似。但是,当(非正则表达式)<Location>用于非代理请求时,它将隐式地将多个斜杠与单个斜杠匹配。例如,如果您指定<Location "/abc/def">且请求为,/abc//def则它将匹配。

    参见

    • <Directory>,<Location>和<Files>部分的工作方式,以解释接收请求时如何组合这些不同的部分。
    • LocationMatch