apache url rewrite 的RewriteRule参数详解

我们经常会在apache那边对一些url进行一些重写操作,那么就会涉及到很多的重写策略的选择,比如重定向的方式,参数的处理,规则匹配的顺序等。

比如我们某个应用会有下面的url rewrite规则:下面是对于域名imall.test.com访问的时候需要重定向到http://page.test.com/channel/imall/index.html这个url上,

<VirtualHost *>
ServerName imall.test.com#if("${industry_port}"!="80"):${industry_port}#end

RewriteEngine on
RewriteCond %{HTTP_HOST} =imall.test.com [NC]
RewriteRule ^/$ http://page.test.com/channel/imall/index.html [L,R]
</VirtualHost>

之前是想上面这么写的,但是发现浏览器的url变了,也就是R其实是外部重定向,那么我希望浏览器的url不改变,那么就需要内部重定向或者反向代理的设计。此时只能参考官方文档了:http://httpd.apache.org/docs/2.2/rewrite/flags.html

这里列出很多的参数:在每条规则后面可以加上多个参数,每个参数用逗号分隔

RewriteRule pattern target [Flag1,Flag2,Flag3]

B (escape backreferences):非字母字符会被编码,
比如有个url为search.php?term=x & y/z,那么此时不设置B参数时会被编码成search.php?term=x%20&y%2Fz=,也是不对的,那么设置B参数之后会被编码成/search.php?term=x%20%26%20y%2Fz,这样对于url rewrite的规则才能被正确解析转发。

C|chain 如果匹配,会继续匹配下一条规则,如果不匹配则跳过后面所有规则;

CO|cookie 可以给当前url设置cookie,规则如:[CO=NAME:VALUE:DOMAIN:lifetime:path:secure:httponly]
示例:

RewriteEngine On
RewriteRule ^/index\.html - [CO=frontdoor:yes:.example.com:1440:/]

DPI|discardpathinfo 丢弃PATH_INFO 信息

E|env 设置环境变量 [E=VAR:VAL] [E=!VAR]
示例:

RewriteRule \.(png|gif|jpg) - [E=image:1]
CustomLog logs/access_log combined env=!image

F|forbidden 直接返回403状态码

RewriteRule \.exe - [F]

G|gone 返回410 状态码,表示资源不再可用

RewriteRule oldproduct - [G,NC]

H|handler 指定请求被某个handler处理,下面这个url表示被php处理引擎处理

RewriteRule !\. - [H=application/x-httpd-php]

L|last 匹配了就不再匹配后面的规则

RewriteBase /
RewriteCond %{REQUEST_URI} !=/index.php
RewriteRule ^(.*) /index.php?req=$1 [L,PT]

N|next 重新从第一条规则开始匹配

RewriteRule (.*)A(.*) $1B$2 [N]

NC|nocase 大小写不敏感

RewriteRule (.*\.(jpg|gif|png))$ http://images.example.com$1 [P,NC]

NE|noescape 不转码特殊字符,默认是会把&,?等特殊字符转成16进制编码,

RewriteRule ^/anchor/(.+) /bigpage.html#$1 [NE,R]

NS|nosubreq 规则不作用于子请求上, SSI (Server Side Include)

P|proxy 做为反向代理转发请求,这样浏览器url就不会改变

RewriteRule /(.*)\.(jpg|gif|png) http://images.example.com/$1.$2 [P]

PT|passthrough url作为一个文件路径处理

Alias /icons /usr/local/apache/icons
RewriteRule /pics/(.+)\.jpg /icons/$1.gif [PT]

QSA|qsappend 带上query参数

RewriteRule /pages/(.+) /page.php?page=$1 [QSA]

R|redirect 重定向 默认302 重定向

S|skip 跳过不想执行的规则匹配

# Is the request for a non-existent file?
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# If so, skip these two RewriteRules
RewriteRule .? - [S=2]
RewriteRule (.*\.gif) images.php?$1
RewriteRule (.*\.html) docs.php?$1

T|type 指定MIME type 类型

# Serve .pl files as plain text
RewriteRule \.pl$ - [T=text/plain]

# Files with 'IMG' in the name are jpg images.
RewriteRule IMG - [T=image/jpg]

apache url rewrite 的RewriteRule参数详解的更多相关文章

  1. 新浪sae url rewrite(伪静态、重定向)详解

    新浪sae url rewrite(伪静态.重定向)详解 http://www.veryhuo.com phpclubs 2011-11-14 投递稿件 sae全程Sina App Engine,真是 ...

  2. jdbc URL中的各个参数详解

    常用的有两个,一个是gjt(Giant JavaTree)组织提供的mysql驱动,其JDBC Driver名称(Java类名)为:org.gjt.mm.mysql.Driver 详情请参见网站:ht ...

  3. mysql:JDBC url 参数详解

    MySql链接url参数详解 jdbc:mysql://[host:port],[host:port].../[database][?参数名1][=参数值1][&参数名2][=参数值2]... ...

  4. Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解

    转载:http://freeloda.blog.51cto.com/2033581/1288553 大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负 ...

  5. Nginx反向代理、负载均衡、页面缓存、URL重写及读写分离详解

    大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统 ...

  6. [转载]Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解

    大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统 ...

  7. (转)Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解

    原文:http://blog.51cto.com/freeloda/1288553 大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Ng ...

  8. Nginx主配置参数详解,Nginx配置网站

    1.Niginx主配置文件参数详解 a.上面博客说了在Linux中安装nginx.博文地址为:http://www.cnblogs.com/hanyinglong/p/5102141.html b.当 ...

  9. linux PHP 编译安装参数详解

    linux PHP 编译安装参数详解 ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc -- ...

随机推荐

  1. 单片机TM4C123学习(七):I2C模块(温度传感器)

    I2C(Inter Intergrated Circuit)总线是Philips公司推出的一种用于IC器件之间连接的二线制串行扩展总线,它通过两根信号线(SDA-串行数据线:SCL-串行时钟线)在连接 ...

  2. 使用Coookie实现浏览器显示上次的登录时间

    实现的效果:  每一次刷新 都会显示上一次访问servlet的时间 ,只适用于同一个浏览器 ,更换浏览器再次访问就该使用session技术了, 因为cookie是浏览器端技术,cookie保存在浏览器 ...

  3. 返回绝对值--Math.Abs 方法

    Math.abs()  返回指定数字的绝对值.

  4. 清空form表单下所有的input值-------------jquery

    $(':input','#' + formid).not(':button, :submit, :reset').val('').removeAttr('checked').removeAttr('s ...

  5. linux ps命令

    名称:ps 使用权限:所有使用者 使用方式:ps [options] [--help] 说明:显示瞬间行程 (process) 的动态 参数: ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍 ...

  6. MSSQL系统进程锁GHOST CLEANUP

    DBCC TRACEON(661 , -1);启用指定的跟踪标志. DBCC TRACEoff(661 , -1); DBCC TRACESTATUS;查看标记

  7. VMware12 安装 CentOS 6.5 64位

    前言:本人在配置Hadoop的过程中,需要搭建Cent OS 64 环境,借此,顺便将Cent OS 64 的安装在此记录,方便自己,也方便大家学习.本次是在VM12虚拟机中实现Cent OS 64 ...

  8. Debian 8 最小化系统安装muduo

    最近开始学习陈硕的muduo C++ Linux多线程网络库,首先当然是要安装.其间遇到过不少问题,最后不能说都解决了,只能说找到了一条不会遇到什么问题的路线.总结起来是两点: 注意各软件之间要版本匹 ...

  9. 5.4 String

    JAVA 中为什么String 是immutable的? 1.设计:当创建一个String(String str2 = "abc"), 如果它(原先有一个String str = ...

  10. 套题 codeforces 359

    A题:Free Ice Cream 注意要使用LL,避免爆int #include <bits/stdc++.h> #define scan(x,y) scanf("%d%d&q ...