Apache 的简单Rewrite

来源:互联网 发布:淘宝网消保规则 编辑:程序博客网 时间:2024/05/16 18:09

最近需要配置一个隐藏真实地址的URL转发,开始头晕脑胀的进行Rewrite的学习。这里记录下我的学习笔记。

首先需要实现单个URL的转发,这里其实不难,我一开始没有使用主机名,而是使用IP。所以直接通过一个

RewriteRule就可以实现,在实验时我将这个URL重定向到了一个固定的地址www.163.com

RewriteRule ^/(.*)$ www.163.com/$1 [P]

这里提到了一个Rewrite关键字,这个关键字的语法为 RewriteRule Pattern Substitution [flags]。其中Pattern 表示那些URL会被匹配上这个转发策略,Substitution 表示如果URL匹配上了Pattern后,将用这个字符串替换Pattern。Pattern是一个Perl语法的正则表达式。flags是可选项的,他的意义可以在Apache模块 mod_rewrite上找到。但是我们这里其实只用到很简单的P,也就是'proxy|P'(强制为代理)。

所以上面的例子做出来就是:

RewtireRule 匹配的URL规则 外部转发的URL 强制为代理

这样一来客户端的地址栏不会变为Rewrite后的地址,也就是说是隐藏转发。

当我们有多个URL需要隐藏转发时,我们只需要不停的添加上面的规则就好了,不过这样也带来了一个难题,就是每次都要修改Http.conf文件,而且还需要重启Apache。所以我们需要动态的进行URL转发,这里我搞了好半天。最后觉得比较简单的方法是通过RewriteMap来实现,如果能通过MySQL实现的话,还请高手指点。

我的动态方式是通过下面的配置实现的

RewriteMap vhost txt:/etc/httpd/conf/vhost_rewrite.txt
RewriteCond   ${vhost:%{HTTP_HOST}}  !^$
RewriteRule ^/(.*) http://${vhost:%{HTTP_HOST}}/$1 [P,R=302,L]

然后在vhost_rewrite.txt中加入例如下面的内容

www.vhost1.com    www.163.com

www.vhost2.com    www.google.com

www.vhost3.com    www.baidu.com

这样一来我们输入www.vhost1.com就会打开www.163.com。而浏览器的地址栏里却显示的是www.vhost1.com

 

本帖是原创帖,本人也是刚刚学习Rewrite,如果有什么不对之处,还请高手指点。

好了下班了!!!!回家!!!

原创粉丝点击