zoukankan      html  css  js  c++  java
  • url重写(urlrewrite)的一些系统变量

    学php也有3年了,一直对url重写不是很了解,本学用到的话都是百度一下,再复制作简单修改,一些变量的参数都不太了解什么意思,难得今天有时间,做个笔记吧!

    1)可用的一些系统变量,在重写条件和重写规则里都可以使用,格式为 %{name_of_variable}

    HTTP headers:connection & request: 
    HTTP_ACCEPT
    HTTP_COOKIE
    HTTP_FORWARDED
    HTTP_HOST
    HTTP_PROXY_CONNECTION
    HTTP_REFERER
    HTTP_USER_AGENT
    AUTH_TYPE
    CONN_REMOTE_ADDR
    CONTEXT_PREFIX
    CONTEXT_DOCUMENT_ROOT
    IPV6
    PATH_INFO
    QUERY_STRING
    REMOTE_ADDR
    REMOTE_HOST
    REMOTE_IDENT
    REMOTE_PORT
    REMOTE_USER
    REQUEST_METHOD
    SCRIPT_FILENAME
     
    server internals:date and time:specials:
    DOCUMENT_ROOT
    SCRIPT_GROUP
    SCRIPT_USER
    SERVER_ADDR
    SERVER_ADMIN
    SERVER_NAME
    SERVER_PORT
    SERVER_PROTOCOL
    SERVER_SOFTWARE
    TIME_YEAR
    TIME_MON
    TIME_DAY
    TIME_HOUR
    TIME_MIN
    TIME_SEC
    TIME_WDAY
    TIME
    API_VERSION
    CONN_REMOTE_ADDR
    HTTPS
    IS_SUBREQ
    REMOTE_ADDR
    REQUEST_FILENAME
    REQUEST_SCHEME
    REQUEST_URI
    THE_REQUEST

     使用示例:

    RewriteCond %{HTTP_REFERER} !abc.com         [NC]
    RewriteCond %{REQUEST_URI}  !logo.png        [NC]
    RewriteRule .(jpg|png|gif|jpeg)$ http://www.abc.com/logo.png [R,NC,L]

    PS:具体每个变量是什么意思就不说了,看变量名一般也知道是什么意思,实在不知道就自己再查吧

    2)参数变量(只列出常用的几个,其他的请看 这里

    -d   是否一个目录

    -f    是否一个文件

    -U   是否一条有效的链接

    这个比较常用来做伪静态时,判断访问链接是否一个真实目录或一个真实文件,不对它们进行重写(!是不等于的意思)

    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?s=/$1 [QSA,PT,L]

    3)比较运算符(用于重写条件 RewriteCond)

    字符串比较

    =      等于

    <      小于

    >      大于

    <=     小于等于

    >=       大于等于

    整数比较

    -eq     等于(equal)

    -ge     大于等于(greater or equal)

    -gt     大于(greater than)

    -le      小于等于(less or equal)

    -lt      小于(less than)

    -ne     不等于(not equal)

    4)RewriteBase 重写的根目录

    默认重写是从根目录 / 开始的,但如果你的web目录是在二维目录里的,例如 /myapp/ 里的,这时候你要使用 urlrewrite的话是这样的

    RewriteRule "^/myapp/index.html$"  "/myapp/index.php"

    这样的话,是不是会很烦??这时候你就可以用RewriteBase了

    RewriteBase "/myapp/"
    RewriteRule "^index.html$"  "index.php"

    5)RewriteRule 后面的标识(flags)(同时只列出几个常用的,其他的请看 这里

    [QSA]      保留未重写之前的链接的查询参数

    RewriteRule "/pages/(.+)" "/page.php?page=$1" [QSA]
    
    使用 [QSA] 标识, 一个类似 /pages/123?one=two 这样的请求,会被重写成 /page.php?page=123&one=two 这样,如果没有 [QSA] 标识, 一样的请求,将会被重写成 /page.php?page=123

    [PT]       使用这个标识,会让系统遇到一些以pathinfo格式分隔的url,不当成一个目录路径来处理

    例如:/home/article/detail/id/1.html
    
    默认地,url用/分隔的,是会被认为是目录来处理的(home目录下的article目录下的detail目录下的id目录下的1.html文件)
    
    使用[PT]标识,就是告诉系统,这就是条字符串,不是目录,不要去找目录

    [L]      匹配的最后一条规则,意思就是如果匹配了这一条规则,就不用比较这一条规则后的规则是否匹配了,直接停掉就可以了

    [NC]     匹配时忽略大小写

    [R]       重定向,url防盗链或301跳转等等会用到

    PS:重定向时,想发出什么请求头,就用R=状态码就可以了
    
    例如301重定向就是这样写的:[R=301,L]

    6)正则怎么写?

    1、正则部分是不需要处理域名也处理不到域名的,重写从根目录(/)开始

    #错误的
    RewriteRule htt://www.abc.com/index.html   http://www.abc.com/index.php  [NC,L]
    
    #这个也是错误的
    RewriteRule (.*)/index.html   $1/index.php  [NC,L]
    
    #正确的
    RewriteRule  index.html   index.php  [NC,L]

    2、^和$

    ^和$是匹配开头和结束的,不限制开头和结束时,相当于模糊匹配

    #这个是可以匹配到图片文件链接,做防盗链的
    RewriteRule .(jpg|png|gif|jpeg)$ http://www.abc.com/logo.png [R,NC,L]
    
    #但下面这样是不行的,图片链接还有域名路径和文件名呢,直接.jpg这样肯定是匹配不上的
    RewriteRule ^.(jpg|png|gif|jpeg)$ http://www.abc.com/logo.png [R,NC,L]
    
    
    #下面这样是这是可以的
    RewriteRule ^(.+).(jpg|png|gif|jpeg)$ http://www.ot.com/logo.png [R,NC,L]

    3、$1 $2 $3 ......??

    $1 $2 这些点位符是替换首页正则式匹配上的内容的,一个括号()一个组

    RewriteRule ^/article/(d+)/(d+).html$ index.php/article/index/cat_id/$1/id/$2 [NC,L]

    前面两个(d+)组,后面用$1 $2代替,再加一个组,就用$3代替,以此类推~

    暂时就这样吧,完。

  • 相关阅读:
    Linux 服务器配置网站以及绑定域名
    vmware 下的三种网络模式
    排序算法-python版
    python实例2-写一个爬虫下载小功能
    python学习-1-列表,元组,字典,集合,文件操作
    linux 10 -Bash Shell编程
    [ActionScript 3.0] AS3 3D双圆环贴图
    [ActionScript 3.0] AS3 3D星形贴图
    [ActionScript 3.0] AS3 绘制星形
    [ActionScript 3.0] AS3 获取函数参数个数
  • 原文地址:https://www.cnblogs.com/tujia/p/6277934.html
Copyright © 2011-2022 走看看