apache的rewriteMap,动态绑定域名
2016-07-29 00:00
423 查看
apache的rewrite模块进行rewrite的时候,需要将规则直接写到http.conf的rewrite模块中,并且规则变动一次就需要重启apache服务器一次。这个让开发者比较郁闷。这里有一个rewriteMap解决了部分的问题,他的工作就是将一个映射关系以Map的形式存储在一个文件中,我们可以通过修改这个文件的对应关系而不需要重启apache服务器就可以应用映射关系。
一般这种策略用来做虚拟主机销售的时候使用,将域名绑定到指定的目录上,现在我将这个拓展下,不单单可以将指定的域名绑定到某个目录,还可以将域名动态的rewrite
操作步骤
1、先进行本地hosts表的配置,方便测试
2、打开apache的rewrite的引擎,然后进行规则的配置
3、看下我们的vhost.map的内容,格式是“字符串+空格+字符串”
一般这种策略用来做虚拟主机销售的时候使用,将域名绑定到指定的目录上,现在我将这个拓展下,不单单可以将指定的域名绑定到某个目录,还可以将域名动态的rewrite
操作步骤
1、先进行本地hosts表的配置,方便测试
127.0.0.1 www.honghu.com 127.0.0.1 aaa.honghu.com 127.0.0.1 bbb.honghu.com 127.0.0.1 www.xxx.com 127.0.0.1 help.hc360.com
2、打开apache的rewrite的引擎,然后进行规则的配置
<VirtualHost *:80> #此模块的开发最重要的是直接获取apache的相关变量值,然后根据值和vhost.map这个文件中的数据进行对应,然后对取得vhost.map中的值进行跳转等操作 <IfModule mod_rewrite.c> #打开重写引擎 RewriteEngine On #设定日志的输出目录 RewriteLog logs/rewrite_log #设定日志的输出级别,正式环境设置为0比较合适 RewriteLogLevel 9 #开始我们的rewriteMap的设置 RewriteMap lowercase int:tolower #将rewriteMap的映射文件创建到指定的地方 RewriteMap vhost txt:D:/apache/apache2.2/vhost.map #判定请求的url的uri部分是否在vhost.map的映射文件中有对应的key值 RewriteCond ${vhost:%{REQUEST_URI}|NOT-FOUND} !=NOT-FOUND #将请求重定向到vhost.map中对应的value值上 RewriteRule ^.* ${vhost:%{REQUEST_URI}} [R,L] #判定指定的域名是否在vhost.map文件中有对应的key值 RewriteCond ${vhost:%{HTTP_HOST}|NOT-FOUND} !=NOT-FOUND #将请求重定向到vhost.map中域名对应的value值上 RewriteRule ^.* ${vhost:%{HTTP_HOST}} [R,L] </IfModule> </VirtualHost>
3、看下我们的vhost.map的内容,格式是“字符串+空格+字符串”
#根据域名重定向的时候使用较多 www.honghu.com http://bbs.hc360.com/thread-894089-1-1.html www.xxx.com http://kongqz.javaeye.com aaa.honghu.com http://www.google.cn #获取uri,根据uri的值进行跳转 /mmt http://bbs.hc360.com/viewthread.php?tid=878467 /chat http://bbs.hc360.com/viewthread.php?tid=901090[/code]
4、查看效果
敲击如下链接查看效果,以下的链接是基于host的配置
(1)、http://www.honghu.com
(2)、http://www.honghu.com/mmt
(3)、http://aaa.honghu.com
(4)、http://aaa.honghu.com/chat
(5)、http://aaa.honghu.com/mmt
(6)、http://help.hc360.com/mmt
5、以上使用的都是直接重定向,如果想让浏览器上的链接达到不变动就能将页面显示出来,可以先开启apache的proxy代理,然后使用强制代理的标记
(1)、开启apache的代理#这个是开启代理必须的设定 LoadModule proxy_module modules/mod_proxy.so #mod_proxy 对http的支持 LoadModule proxy_http_module modules/mod_proxy_http.so
(2)、强制代理的url重写规则RewriteCond ${vhost:%{REQUEST_URI}|NOT-FOUND} !=NOT-FOUND RewriteRule ^.* ${vhost:%{REQUEST_URI}} [P,L] RewriteCond ${vhost:%{HTTP_HOST}|NOT-FOUND} !=NOT-FOUND RewriteRule ^.* ${vhost:%{HTTP_HOST}} [P,L]
(3)、重新访问上边的url,感受下无重定向的快乐吧
(4)、如果你强制代理的url和当前浏览器的url没指向同一个机器,痛苦随之而来,你会发现被代理的也没上的图片链接以及url链接很多都以你浏览器上的url开头,这些链接显示不了或者不可用。唯一的解决办法就是将所有被代理服务器上的规则都给代理了
相关文章推荐
- 【入门】Apache ActiveMQ 5.4.1 的下载安装
- 为Apache Ant添加FTP Task支持
- 【入门】Apache ActiveMQ 5.4.1 的下载安装
- 为Apache Ant添加FTP Task支持
- Apache Shiro学习笔记(五)Web中的应用
- 五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT)
- ubuntu开启rewrite模式
- CentOS7 install apache
- Apache通用日志工具commons-logging和Log4j使用总结
- 2016年微信公号调试bug总结大会(Apache2.4.6+PHP7.0)
- apache配置中ProxyPassReverse指令的含义
- Apache FtpServer 实现文件的上传和下载
- apache中显示目录列表
- apache2.2 prefork模式优化
- Apache Spark DataFrames入门指南:操作DataFrame
- Apache Spark DataFrames入门指南:创建DataFrame
- Win10引发的 wamp集成包启动不了
- 基于apache commons pool实现自动以ftp连接池
- org.apache.catalina.connector.RequestFacade cannot be cast to org.springframewor
- 改变Apache端口等配置修改方法