Apache conf配置文件 allow deny order files directory location解释,re(正则表达式)入门速成

此文章仅对作者认为常用的选项进行了解释

表达式:RewriteCond Syntax: RewriteCond TestString CondPattern [flags]

TestString源串

配置文件目录:/etc/apache2/apache2.conf

TestString一般使用%{NAME_OF_VARIABLE}

服务器变量%{NAME_OF_VARIABLE}如下

HTTP头 连接与请求
HTTP_USER_AGENT
HTTP_REFERER
HTTP_COOKIE
HTTP_FORWARDED
HTTP_HOST
HTTP_PROXY_CONNECTION
HTTP_ACCEPT
REMOTE_ADDR
REMOTE_HOST
REMOTE_PORT
REMOTE_USER
REMOTE_IDENT
REQUEST_METHOD
SCRIPT_FILENAME
PATH_INFO
QUERY_STRING
AUTH_TYPE
服务器自身 日期和时间
DOCUMENT_ROOT
SERVER_ADMIN
SERVER_NAME
SERVER_ADDR
SERVER_PORT
SERVER_PROTOCOL
SERVER_SOFTWARE
TIME_YEAR
TIME_MON
TIME_DAY
TIME_HOUR
TIME_MIN
TIME_SEC
TIME_WDAY
TIME
其他
API_VERSION
THE_REQUEST——完整request,如GET /aaa HTTP/1.1
REQUEST_URI——请求虚拟地址,即host后面的部分
REQUEST_FILENAME——请求指向的本地文件名
IS_SUBREQ——是否是子请求
HTTPS——是否开启https(开启时值为on)

CondPattern模式串(匹配模板)

可以用正则表达式,简介:

字符 含义
特殊字符转义成本身
. 代替任意字符
() 中间包含的视为一个整体
| 二选一
* 前面的字符/块出现0+
+ 前面的字符/块出现1+
^ 匹配开头
$ 匹配结尾
? 非贪婪式匹配或者前面的字符/块出现0/1

不在表中的指定字符可以不用转义字符直接使用
不匹配开头结尾时可以从任意处开始,任意处结束

补充:

  1. 可以在模板串前增加一个 ! 前缀,以用表示不匹配模板。但并不是所有的 test 都可以加!前缀。
  2. CondPattern 中可以使用以下特殊变量:
    • '<condpattern' (="" 小于,基于字母顺序="" )="" 将="" condpattern="" 当作一个普通字符串,将它和="" teststring="" 进行比较,当="" 的字符小于="" 为真="" .="" o="" '="">CondPattern' ( 大于 ) 将 condPattern 当作一个普通字符串,将它和 TestString 进行比较,当 TestString 的字符大于 CondPattern 为真 .
    • '=CondPattern' ( 等于 ) 将 condPattern 当作一个普通字符串,将它和 TestString 进行比较,当 TestString 与 CondPattern 完全相同时为真 . 如果 CondPattern 只是 "" ( 两个引号紧挨在一起 ) 此时需 TestString 为空字符串方为真 .
    • '-d' ( 是否为目录 ) 将 testString 当作一个目录名,检查它是否存在以及是否是一个目录 .
    • '-f' ( 是否是 regular file) 将 testString 当作一个文件名,检查它是否存在以及是否是一个 regular 文件 .
    • '-s' ( 是否为长度不为 0 的 regular 文件 ) 将 testString 当作一个文件名,检查它是否存在以及是否是一个长度大于 0 的 regular 文件
    • '-l' ( 是否为 symbolic link) 将 testString 当作一个文件名,检查它是否存在以及是否是一个 symbolic link.
    • '-F' ( 通过 subrequest 来检查某文件是否可访问 ) 检查 TestString 是否是一个合法的文件,而且通过服务器范围内的当前设置的访问控制进行访问。这个检查是通过一个内部 subrequest 完成的 , 因此需要小心使用这个功能以降低服务器的性能。
    • '-U' ( 通过 subrequest 来检查某个 URL 是否存在 ) 检查 TestString 是否是一个合法的 URL ,而且通过服务器范围内的当前设置的访问控制进行访问。这个检查是通过一个内部 subrequest 完成的 , 因此需要小心使用这个功能以降低服务器的性能。

flags是第三个参数,多个标志之间用逗号分隔。

  1. 'nocase|NC' ( 不区分大小写 )   在扩展后的 TestString 和 CondPattern 中,比较时不区分文本的大小写。注意,这个标志对文件系统和 subrequest 检查没有影响 .

  2. 'ornext|OR' ( 建立与下一个条件的或的关系 )   默认的情况下,二个条件之间是 AND 的关系,用这个标志将关系改为 OR 。例如:

    RewriteCond %{REMOTE_HOST} ^host1.* [OR]
    RewriteCond %{REMOTE_HOST} ^host2.* [OR]
    RewriteCond %{REMOTE_HOST} ^host3.*
    RewriteRule ... 
    

    如果没有 [OR] 标志,需要写三个条件 / 规则 .

  3. 'last|L'(表示当前规则是最后一条规则),停止分析以后规则的重写。该标志的使用频率非常高。例如:

    RewriteCond %{REQUEST_URI} !index.php
    RewriteRule ^(.*) index.php?req=$1 [L]
    
  4. 'redirect|R' (进行重定向), 状态码在300-399里都可以, 默认是 302 重定向.通常和标志L一起使用. 使用模式: [R[=302]],302表示临时跳转,301表示永久重定向

文件系统

(files|directory|location)(match)?

上面这个表达式即即files|directory|location|filesmatch|directorymatch|locationmatch
首先,match表示开启正则
location匹配请求的虚拟地址(即host后面的部分)
directory匹配请求对应的本地地址(意思上相当于DocumentRoot/Location)
files用在directory里面,只保留目录下的相对路径,详见例子3
优先级:下层目录>上层目录,具体目录>通配符

例子们

  1. 根据客户端浏览器的不同,返回不同的首页面。
    RewriteCond %{HTTP_USER_AGENT} ^Mozilla.*
    RewriteRule ^/$ /homepage.max.html [L]
    RewriteCond %{HTTP_USER_AGENT} ^Lynx.*
    RewriteRule ^/$ /homepage.min.html [L]
    RewriteRule ^/$ /homepage.std.html [L]
    
  2. image
  3. image

引用资料:
Apache conf配置中的Order说明——海龙
Apache中 RewriteCond 规则参数介绍——clearriver

原文地址:https://www.cnblogs.com/WhXcjm/p/14923979.html