zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    HDU 1561 The more, The Better 经典树形DP
    hdu Anniversary party 树形DP,点带有值。求MAX
    hdu 3466 Proud Merchants 01背包变形
    一个简单的网站首页制作
    linux系统下who&who am i与whoami的区别,以及与select * from dba_users的区别
    linux系统下who&who am i与whoami的区别,以及与select * from dba_users的区别
    如何通过SecureCRTPortable.exe 软件远程连接某个计算机(或者虚拟机)中的某个数据库
    如何通过SecureCRTPortable.exe 软件远程连接某个计算机(或者虚拟机)中的某个数据库
    主键自增长
    主键自增长
  • 原文地址:https://www.cnblogs.com/WhXcjm/p/14923979.html
Copyright © 2011-2022 走看看