用[C]关键字突破apache rewrite模块最多9个参数限制
来源:互联网 发布:网络语古耐是什么意思 编辑:程序博客网 时间:2024/06/03 20:30
众所周知apache的rewrite模块一条规则最多只能传递9个参数.但总是有特殊应用。这里记录的我工作中碰到的实际问题。
例子:
请求的URL形式:^/house/([^_^/]*)_([^_]*)_([^_]*)_([^_]*)_([^_]*)_([^_]*)_([^_]*)_([^_]*)_([^_]*)_([^_]*)_([^_]*)_([^_]*)_([^_]*)_([^_]*)_([^_]*)_([^_]*)_([^_]*)_([^_]*)\.htm$
测试URL:/house/北京_____朝阳_住宅___________1.htm
我们想达到的效果
转换为以下形式
/house/web/Search_Result.php?strCity=$1&strComarea=$2&strRoundStation=$3&strStartDate=$4&strLiveDate=$5&strDistrict=$6&strPurpose=$7&StrNameKey=$8&StrNameKeyword=$9&strOrderBy=$10&strPrice=$11&character=$12&railway=$13&railway_station=$14&area_buy=$15&show_type=$16&saling=$17&PageNo=$18
共18个参数。超过了apache rewrite 每条规则最多处理9个参数的限制。
这里用到了 [c]关键字对URL进行拆分,目的是使每条RewriteRule处理的参数小于9个
1、RewriteRule^/house/([^_^/]*)_([^_]*)_([^_]*)_([^_]*)_([^_]*)_([^_]*)_([^_]*)_(.*)\.htm /house/$8.htmstrCity=$1&strComarea=$2&strRoundStation=$3&strStartDate=$4&strLiveDate=$5&strDistrict=$6&strPurpose=$7 [C,NC]
$1~$7 匹配第1~7个参数
$8 _(.*)匹配第7个参数后.htm之前所有字符. $8 = __________1
含义是 把匹配出的7个参数按既定格式附加在URL最后,把超出参数限制的部分合并到一个参数中,统一转交下一条通过[C]关键字关联的规则处理。
执行结果
/house/北京_____朝阳_住宅___________1.htm
转换到
/house/__________1.htmstrCity=北京&strComarea=&strRoundStation=&strStartDate=&strLiveDate=&strDistrict=朝阳&strPurpose=住宅'
2、RewriteRule ^/house/([^_^/]*)_([^_]*)_([^_]*)_([^_]*)_([^_]*)_([^_]*)_(.*)\.htm(.*) /house/$7.htm$8&StrNameKey=$1&StrNameKeyword=$2&strOrderBy=$3&strPrice=$4&character=$5&railway=$6 [C,NC]
$1~$6 匹配第8~13个参数
$7 第13个参数之后到.htm之前的部分 $7=____1
$8 匹配上一条规则生成的参数部分,$8=strCity=北京&strComarea=&strRoundStation=&strStartDate=&strLiveDate=&strDistrict=朝阳&strPurpose=住宅' ->'/house/____1.htmstrCity=北京&strComarea=&strRoundStation=&strStartDate=&strLiveDate=&strDistrict=朝阳&strPurpose=住宅&StrNameKey=&StrNameKeyword=&strOrderBy=&strPrice=&character=&railway=
传递数据占用了两个参数,所以本条只能匹配6个参数。
执行结果
/house/__________1.htmstrCity=北京&strComarea=&strRoundStation=&strStartDate=&strLiveDate=&strDistrict=朝阳&strPurpose=住宅
转换到
/house/____1.htmstrCity=北京&strComarea=&strRoundStation=&strStartDate=&strLiveDate=&strDistrict=朝阳&strPurpose=住宅&StrNameKey=&StrNameKeyword=&strOrderBy=&strPrice=&character=&railway='
3、RewriteRule/house/([^_]*)_([^_]*)_([^_]*)_([^_]*)_([^_]*)\.htm(.*) /house/web/Search_Result.php?$6&railway_station=$1&area_buy=$2&show_type=$3&saling=$4&PageNo=$5[QSA,L,NC]
$1~$5 匹配第14~18个参数
$6 匹配上一条规则生成的参数部分
[L]表示这是最后一条规则
[QSA]强制追加请求。
执行结果
/house/____1.htmstrCity=北京&strComarea=&strRoundStation=&strStartDate=&strLiveDate=&strDistrict=朝阳&strPurpose=住宅&StrNameKey=&StrNameKeyword=&strOrderBy=&strPrice=&character=&railway=
转换到
/house/web/Search_Result.php?strCity=北京&strComarea=&strRoundStation=&strStartDate=&strLiveDate=&strDistrict=朝阳&strPurpose=住宅&StrNameKey=&StrNameKeyword=&strOrderBy=&strPrice=&character=&railway=&railway_station=&area_buy=&show_type=&saling=&PageNo=1
用到的rewrite标志 关键字
L (last rule) 表明当前规则是最后匹配的规则,停止匹配以后的规则。
C(chained with next rule) 与下一条规则关联.(如果[C]规则匹配则转交下一个规则处理,如果不匹配,那么下面所有关联的规则都跳过。)
NC(no case) 不区分大小写
RewriteRule ^/([0-9]+)_([0-9]+)/([0-9]+)/([0-9]+)/([0-9]+)/([a-zA-Z0]+)/([0-9]+)/([0-9]+)/(.*)/$ /$9.htmlbegin=$1&end=$2&age=$3&mile=$4&autos=$5&logo=$6&catesubclass=$7&brand=$8 [C,NC]
RewriteRule ^/([a-zA-Z0-9]+)/p_([0-9]+).html(.*)$ /ceshi.php?$3&cityid=$1&page=$2 [QSA,NC,L]
- 用[C]关键字突破apache rewrite模块最多9个参数限制
- nginx rewrite 规则 与Apache rewrite 规则 参数多于9个时写法区别
- Apache 2.4 Rewrite 模块
- Apache开启Rewrite模块
- Apache-rewrite模块重写相关的参数说明
- C++ mutable关键字(突破const关键字限制)
- Apache Rewrite模块的调用
- apache module rewrite 参数详解
- apache rewrite 参数和例子
- linux 给没有Rewrite模块的Apache增加Rewrite模块
- Apache Rewrite重写模块(二):10个实例详细分析
- 解决LoadRunner参数化最多读取100个值,数据限制的问题
- Ubuntu下apache rewrite模块开启
- 配置Apache的Mode Rewrite模块
- 开启apache rewrite模块的方法
- 开启apache的url rewrite模块
- Apache Rewrite模块的简单应用
- apache的rewrite模块实例操作
- Hibernate 不同数据库的连接及SQL方言
- .Net的三层架构
- 用友面试题
- 原创《乐动魔方》 sliverlight版
- SQL Server 2005数据库中,获取某个表的创建时间
- 用[C]关键字突破apache rewrite模块最多9个参数限制
- 写给刚刚上岗的Web开发人员
- 深入 Java 调试体系: 第 1 部分,JPDA 体系概览
- MVC+DAO设计模式
- C格式输出
- OSI七层和TCP/IP四层
- Remove '@override' annotation
- Java学习笔记六
- 深入 Java 调试体系,第 2 部分: JVMTI 和 Agent 实现