设为首页 收藏本站
查看: 1430|回复: 0

[经验分享] RewriteMap(apache)

[复制链接]

尚未签到

发表于 2017-12-24 11:34:52 | 显示全部楼层 |阅读模式
  最近在工作中发现一个陌生的语法,apache服务器站点rewrite配置文件里的,开始还以为是apache的一种新语法,以这个词网上搜索,没搜到相关文章,跟老同事请教了一下,说这个是RewriteMap,之前也不太了解这个指令,今天特意网上查了下,发现不错,参考地址:https://httpd.apache.org/docs/current/rewrite/rewritemap.html ,http://blog.csdn.net/phphot/article/details/4049242 整理如下
  指令介绍截图如下
DSC0000.png

  根据说明,我们知道这个指令相当于定义了一个可扩展的方法用于RewriteCond和RewriteRule,实现类似替换的功能(传入一个字符串,返回一个字符串或空串)。
  定义一个扩展方法的语法为
  RewriteMap MapName MapType:MapSource
  MapName为方法名,可以是任意的字符串(避免使用服务器保留字,应该会有问题)
  MapType是方法的类型,可选类型有txt,rnd,dbm,int,prg,dbd,fastdbd
  MapSource是不同类型下的执行方法,类似于编程语言里的函数的方法体,暂时先这样理解,后面会具体描述
  扩展方法的使用
    ${ MapName : LookupKey }
    ${ MapName : LookupKey | DefaultValue }
  MapName为扩展方法定义时的方法名
  LookupKey是传入方法的参数
  DefaultValue为默认值,如果方法返回空串,则返回默认值
  方法类型简要信息如下
DSC0001.png

  txt 文本类型
  如果方法类型为txt,则MapSource为一个文本文件,文件文件的内容是每行以空格为分割符的键值对,可以有注释,注释以#开头。查询到的键值对会被httpd缓存,除非服务器重启或者是MapSource文本文件修改时间变更
DSC0002.png

  rnd 文本类型扩展(随机)
  如果方法类型为rnd,类似于txt类型,不过文本文件中键值对中的值可以有多个,用|分割,匹配到键之后,随机返回某一个值
DSC0003.png

  int 内部方法
  如果方法类型为int,表明使用内部方法,大小写转化,编码特殊字符,解码特殊字符
DSC0004.png

  dbm dbm hash file
  如果方法类型为dbm,表明使用hash文件,和文本文件的区别在于有索引,更高效且也支持缓存查询到的键。使用的hash文件可以由文本文件通过httxt2dbm工具生成,生成的hash文件有sdbm,gdbm,ndbm,db四种类型
DSC0005.png

  dbd 或者 fastdbd
  如果方法类型为dbd或fastdbd,表明使用sql查询。使用此种类型需要确保数据库模块(mod_dbd)被正确配置。sql查询返回可能不止一行,如果是多行的情况,则随机使用一行。dbd和fastdbd两者的区别在于dbd每次请求都会去查询数据库,而fastdbd会缓存数据库查询,除非服务器重启。fastdbd更高效更快
DSC0006.png

  prg 自定义脚本
  如果方法类型为prg,表明使用自定义脚本处理,传入脚本的值通过stdin接收,返回的值通过stdout返回
DSC0007.png

  工作中的使用场景是url的301跳转,通过dbm
  配置如下
  RewriteMap map_301 dbm=db:/xxx/rewrite_mapping_301.db
  RewriteCond ${map_301:%{REQUEST_URI}}  !^$
  RewriteRule ^/(.*)${map_301:%{REQUEST_URI}} [QSA,R=301]
  原始文本文件类似
  /test-brandstore/ /test-fashionfriends/
  /test-nature-me/ /test-douglas/
  /test-reifenchef/ /test-fritzreifen/
  /test-personalgifts/ /test-yoursurprise/
  /test-entertain/ /test-telekom/
  /test-posterjack/ /test-posterxxl/
  /test-d-living/ /test-mytime/
  /test-klick/ /test-whitewall/
  /test-myprinting/ /test-snapfish/
  /test-papershaker/ /test-photobox/
  /test-getmobile/ /test-sparhandy/
  /test-parfumidee/ /test-geschenkidee-ch/
  /test-ebookers-at/ /test-expedia-at/
  /test-rs-components/ /test-rs-online/
  /test-jack-und-jones/ /test-jack-and-jones/
  /test-nded/ /test-nded-de/
  /test-surfstitch/ /test-surfdome/
  /test-hochzeitsgeschenke/ /test-geschenke24/
  /test-baby-butt/ /test-kinderbutt/
  /test-parfumdeal/ /test-yatego/
  /test-gimahhot/ /test-yatego/
  最后放一张httxt2dbm工具的使用方法截图,方便查阅
DSC0008.png

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-427480-1-1.html 上篇帖子: 再谈 apache设置virtualhost + apache的一些相关设值 下篇帖子: 基于Delphi7 WebService 在Apache发布及Apache使用说明
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表