apache rewrite 参数和例子

来源:互联网 发布:三级便民服务网络体系 编辑:程序博客网 时间:2024/06/03 13:49

apache rewrite 参数和例子

‍1.Apache mod_rewrite重写规则的标志

     1) R[=code](force redirect) 重定向到外部的URL.如果code不指定,将用缺省的302 HTTP状态码。
     2) F(force URL to be forbidden)禁用URL,返回403HTTP状态码。
     3) G(force URL to be gone) 强制URL为GONE,返回410HTTP状态码。
     4) P(force proxy) 强制使用代理转发。
     5) L(last rule) 表明当前规则是最后一条规则,停止分析以后规则的重写。
     6) N(next round) 重新从第一条规则开始运行重写过程。
     7) C(chained with next rule) 与下一条规则关联,如果规则匹配则正常处理,该标志无效,如果不匹配,那么下面所有关联的规则都跳过。
     8) T=MIME-type(force MIME type) 强制MIME类型
     9) NS (used only if no internal sub-request) 只用于不是内部子请求
     10)NC(no case) 不区分大小写
     11)QSA(query string append) 追加请求字符串
     12)NE(no URI escaping of output) 不在输出转义特殊字符
     例如:RewriteRule /foo/(.*) /bar?arg=P1%3d$1 [R,NE] 将能正确的将/foo/zoo转换成/bar?arg=P1=zoo
     13)PT(pass through to next handler) 传递给下一个处理
     例如:RewriteRule ^/abc(.*) /def$1 [PT] # 将会交给/def规则处理Alias /def /ghi
     14)S=num(skip next rule(s)) 跳过num条规则
     15)E=VAR:VAL(set environment variable) 设置环境变量

2.服务器变量                                                                   

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_USER
    REMOTE_IDENT
    REQUEST_METHOD
    SCRIPT_FILENAME
    PATH_INFO
    QUERY_STRING
    AUTH_TYPE
server internals: system stuff: specials:
    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 

3.举例说明

例一.把client请求的主机前缀不是www.owjee.com和70.40.213.183都跳转到主机前缀为http://www.owjee.com,避免相同内容的网页有多个指向的域名如http://owjee.com。

     NameVirtualHost 70.40.213.183:80
     ServerAdmin 
     DocumentRoot “/web”
     ServerName kiya.cn
     RewriteEngine on                              #打开rewirte功能
     RewriteCond %{HTTP_HOST} !^www.owjee.com [NC]   #声明Client请求的主机中前缀不是www.owjee.com,其中 [NC] 的意思是忽略大小写
     RewriteCond %{HTTP_HOST} !^70.40.213.183 [NC] #声明Client请求的主机中前缀不是70.40.213.183,其中 [NC] 的意思是忽略大小写
     RewriteCond %{HTTP_HOST} !^$                  #声明Client请求的主机中前缀不为空
     RewriteRule ^(.*) http://www.owjee.com [L]     #含义是如果Client请求的主机中的前缀符合上述条件,则直接进行跳转到http://www.owjee.com这里的.*是指匹配所有URL中不包含换行字符,()括号的功能是把所有的字符做一个标记,以便于后面的应用.

例二.将输入en.owjee.com的域名时跳转到http://www.owjee.com

     RewriteEngine on
     RewriteCond %{HTTP_HOST} ^en.owjee.com [NC]
     RewriteRule ^(.*) http://www.owjee.com[L]

例三.新域名为www.sicasoft.com,这时需要将原来的域名ss.kiya.cn, 以及论坛所在地址ss.kiya.cn/bbs/定向到新的域名,以便用户可以找到,并且使原来的论坛URL继续有效而不出现404未找到.

     RewriteEngine On
     RewriteCond %{REQUEST_URI} ^/bbs/
     RewriteRule ^bbs/(.*) http://bbs.sicasoft.com/$1 [R=permanent,L]
     RewriteCond %{REQUEST_URI} !^/bbs/
     RewriteRule ^(.*) http://www.sicasoft.com/$1 [R=permanent,L]


例四.同时达到下面两个要求:
1.用http://www.zzz.com/xxx.php 来访问 http://www.zzz.com/xxx/
2.用http://yyy.zzz.com 来访问 http://www.zzz.com/user.php?username=yyy 的功能

     RewriteEngine On
     RewriteCond %{HTTP_HOST} ^www.zzz.com
     RewriteCond %{REQUEST_URI} !^user.php$
     RewriteCond %{REQUEST_URI} .php$
     RewriteRule (.*).php$ http://www.zzz.com/$1/ [R]
     RewriteCond %{HTTP_HOST} !^www.zzz.com
     RewriteRule ^(.+) %{HTTP_HOST} [C]
     RewriteRule ^([^.]+).zzz.com http://www.zzz.com/user.php?username=$1

例五.首先要在DNS服务器上打开域名的泛域名解析(自己做或者找域名服务商做)。比如把 *.kiya.us和 *.kiya.cn全部解析到了IP地址70.40.213.183上。Apache中关于*.kiya.us的虚拟主机的设定。

     ServerAdmin 
     DocumentRoot /home/www/www.kiya.us
     ServerName dns.kiya.us
     ServerAlias dns.kiya.us kiya.us *.kiya.us
     CustomLog /var/log/httpd/osa/access_log.log” common
     ErrorLog /var/log/httpd/osa/error_log.log”
     AllowOverride None
     Order deny,allow
     #AddDefaultCharset GB2312
     RewriteEngine on
     RewriteCond %{HTTP_HOST} ^[^.]+.kiya.(cn|us)$
     RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
     RewriteRule ^([^.]+).kiya.(cn|us)(.*)$ /home/www/www.kiya.us/sylvan$3?un=$1&%{QUERY_STRING} [L]


例六.Rewrite防盗链正则,不允许这两个网站盗链,其它的网站都可以盗链的规则怎么写.

     RewriteEngine On
     RewriteCond %{HTTP_REFERER} chinaz.com [NC]
     RewriteCond %{HTTP_REFERER} im286.com [NC]
     RewriteRule .*\.(jpg|jpeg|gif|png|rar|zip|txt|ace|torrent|gz|swf)$ http://www.xxx.com/fuck.png [R,NC,L]

列七.两个关于判断USER AGENT 例子和自动添加.php扩展名及自动换.html到.php扩展名的例子:

     RewriteEngine on
     RewriteCond %{HTTP_USER_AGENT} ^MSIE [NC,OR]
     RewriteCond %{HTTP_USER_AGENT} ^Opera [NC]
     RewriteRule ^.* – [F,L] 这里”-”表示没有替换,浏览器为IE和Opera的访客将被禁止访问。

     RewriteEngine On
     RewriteBase /test
     RewriteCond %{REQUEST_FILENAME}.php -f
     RewriteRule ([^/]+)$ /test/$1.php
     #for example: /test/admin => /test/admin.php
     RewriteRule ([^/]+)\.html$ /test/$1.php [L]
     #for example: /test/admin.html => /test/admin.php

     限制目录只能显示图片
     < IfModule mod_rewrite.c>
     RewriteEngine on
     RewriteCond %{REQUEST_FILENAME} !^.*\.(gif|jpg|jpeg|png|swf)$
     RewriteRule .*$ – [F,L]
     < /IfModule>


例八.关于特定文件扩展名的重写。

     重写有某些扩展名的文件:
     RewriteRule (.*.css$|.*.js$) gzip.php?$1 [L]
     如果要排除一些扩展名:
     RewriteRule !\.(js|ico|gif|jpg|JPG|png|PNG|css|pdf|swf)$ index.php

原创粉丝点击