Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1215852
  • 博文数量: 275
  • 博客积分: 6445
  • 博客等级: 准将
  • 技术积分: 2863
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-04 23:22
文章分类

全部博文(275)

文章存档

2024年(4)

2023年(5)

2022年(3)

2021年(18)

2020年(9)

2019年(1)

2018年(13)

2017年(11)

2015年(9)

2013年(2)

2012年(4)

2011年(24)

2010年(114)

2009年(6)

2008年(29)

2007年(13)

2006年(10)

我的朋友

分类: LINUX

2008-09-14 11:15:37

modrewrite配置文档学习笔记:

1.环境变量:

    例子:

    SCRIPT_NAME=/sw/lib/w3s/tree/global/u/rse/.www/index.html
    SCRIPT_FILENAME=/u/rse/.www/index.html
    SCRIPT_URL=/u/rse/
    SCRIPT_URI=

2:RewriteBase
    描述:设定基于目录的重写规则的Base url.
    Syntax:    RewriteBase URL-path
    Context:    directory, .htaccess
    Override:    FileInfo
    Status:    Extension
    Module:    mod_rewrite
    这个一般不太需要管它.
3.RewriteCond
    用法:    RewriteCond Teststring Pattern
    这里是Teststring里用到的一些内置变量.
    HTTP headers:    connection & request:
    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_URI
    REQUEST_FILENAME
    IS_SUBREQ
    HTTPS

    #你可以在规则前加"!"取反.
    #这是一些常见的特殊的规则。你可以使用他们来取代一些表达式:

    * 'CondPattern’ (lexicographically follows)
    * ‘=CondPattern’ (lexicographically equal)
    * ‘-d’ (is directory)  测试是否是目录.
    * ‘-f’ (is regular file) 测试是否是常规文件.
    * ‘-s’ (is regular file, with size)
    * ‘-l’ (is symbolic link)
    * ‘-F’ (is existing file, via subrequest)
    * ‘-U’ (is existing URL, via subrequest)

    你可以为规则后设置[flags]选项作为第三个参数.常见的有:
    You can also set special flags for CondPattern by appending [flags]  as the third argument to the RewriteCond  directive, where flags is a comma-separated list of any of the following flags:

    # ‘nocase|NC’ (no case)
    # ‘ornext|OR’ (or next condition)
    例如:
    RewriteCond %{REMOTE_HOST}  ^host1.*  [OR]
    RewriteCond %{REMOTE_HOST}  ^host2.*  [OR]
    RewriteCond %{REMOTE_HOST}  ^host3.*
    RewriteRule …some special stuff for any of these hosts…

    如下例:
    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]
    用Mozilla类的浏览器访问时会带你到homepage.max.html,这里支持所有特性。用Lynx来浏览时,带你到纯文本页(homepage.min.html),默认情况下会访问一个叫homepage.std.html的页.

4.RewriteEngine:
    使用:
    RewriteEngine On|Off
    如果存在.htaccess的文件,应当显式地指明RewriteEngine On.
    因为默认情况下.htaccess的RewriteEngine项是Off的。因此如果想用.htaccess来设置rewrite,文件头一行一般都需要RewriteEngine On

5.RewriteLock:
    供rewrite-mapping程序同步使用的锁文件。
    使用:
    RewriteLock file-path

6.RewriteLog:
    设定日志文件.如果不是以”/”开头,则是指相对ServerRoot的相对路径.
    使用:
    RewriteLog    file-path

7.RewriteLogLevel:
    设定日志记录级别。
    使用:
    RewriteLogLevel level
    默认:

8.RewriteMap:
    使用Mapping.
    它的上下文是Server config 和Virtual host
    使用:
    RewriteMap Mapname MapType:Mapsource
    例如:
    在httpd.conf中配置:
    #RewriteMap exampleMap txt:/path/to/file/map.txt
    #RewriteRule ^/ex/(.*)    ${exampleMap:$1}
    而map文件的格式有这个几个:
    1.txt类型的map文件:
        #Standard Plain     txt:
        #map.txt
        #maptype:txt
        Ralf.S.Engelschall    rse   # Bastard Operator From Hell
        Mr.Joe.Average        joe   # Mr. Average

    2.Randomized Plain Text
        #maptyp:rnd
        static    www1|www2|www3|www4
        dynamic    www5|www6

        配置:
        RewriteMap servers    rnd:/path/to/mapfile/map.txt
        RewriteRule ^/(.*.(png|gif|jpg)) {servers:static}/$1    [NC,P,L]
        RewriteRule ^/(.*)    {servers:dynamic}/$1    [P,L]

    3.dbm
        这里提供了一个txt2dmb程序。
        !/path/to/bin/perl
        ##
        ##  txt2dbm — convert txt map to dbm format
        ##

        use NDBM_File;
        use Fcntl;

        ($txtmap, $dbmmap) = @ARGV;

        open(TXT, “<$txtmap") or die "Couldn't open $txtmap!n";
        tie (%DB, 'NDBM_File', $dbmmap,O_RDWR|O_TRUNC|O_CREAT, 0644)
          or die "Couldn't create $dbmmap!n";

        while () {
          next if (/^s*#/ or /^s*$/);
          $DB{$1} = $2 if (/^s*(S+)s+(S+)/);
        }

        untie %DB;
        close(TXT);

        用法:
        $ txt2dbm map.txt map.db

    4.内置函数:
        map:int map-source:internal apache functions
        functions有:toupper,tolower,escape,unescape

    5.外部程序:
        maptyp:prg map source:外部程序的路径.
        示例:
        #!/usr/bin/perl
        $| = 1;
        while () {
            # …put here any transformations or lookups…
            print $_;
        }

9.RewriteOptions
    用法:
    RewriteOptions rewriteoptions
    default    :
    rewriteoptions    maxRedirects=10
    上下文:
    server config,virtual host,.htaccess directory
    rewriteoptions可以是下面两个值:
    inherit:从上一级配置继承.
    MaxRedirects=num(10,15,,,,,等等)

10.RewriteRule:
    这是mod_rewrite中用得最多的语句了(”the real rewriting workhorse”);
    用法:
    RewriteRule pattern Substitution [Flags]

    Quantifiers:
      ?           0 or 1 occurrences of the preceding text
      *           0 or N occurrences of the preceding text (N > 0)
      +           1 or N occurrences of the preceding text (N > 1)

    Grouping:
      (text)      Grouping of text
                  (used either to set the borders of an alternative as above, or
                  to make backreferences, where the Nth group can
                  be referred to on the RHS of a RewriteRule as $N)

    Anchors:
      ^           Start-of-line anchor
      $           End-of-line anchor

    Escaping:
      char       escape the given char
                  (for instance, to specify the chars “.[]()” etc.)

    一些技巧:
   1.  back-references ($N) to the RewriteRule pattern
   2. back-references (%N) to the last matched RewriteCond pattern
   3. server-variables as in rule condition test-strings (%{VARNAME})
   4. mapping-function calls (${mapname:key|default})

    关于Flags:
    # ‘chain|C’ (chained with next rule)
    # ‘cookie|CO=NAME:VAL:domain[:lifetime[:path]]’ (set cookie)
    # ‘env|E=VAR:VAL’ (set environment variable)
    # ‘forbidden|F’ (force URL to be forbidden)
    # ‘gone|G’ (force URL to be gone)
    # ‘last|L’ (last rule)
    # ‘next|N’ (next round)
    # ‘nocase|NC’ (no case)
    # ‘noescape|NE’ (no URI escaping of output)
    例如:
    RewriteRule /foo/(.*) /bar?arg=P1%3d$1 [R,NE]
    这将会将’/foo/zed’ 转向到’/bar?arg=p1=zed’
    # ‘nosubreq|NS’ ( not for internal sub-requests)
    # ‘proxy|P’ (force proxy)

    Note: mod_proxy must be enabled in order to use this flag.
    # ‘passthrough|PT’ (pass through to next handler)
    (例如:
    RewriteRule ^/abc(.*) /def$1 [PT]
    Alias /def /ghi

    # ‘qsappend|QSA’ (query string append)
    # ‘redirect|R [=code]’ (force redirect)
    # ’skip|S=num’ (skip next rule(s))
    # ‘type|T=MIME-type’ (force MIME type)
阅读(1719) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~