apache mod_rewrite 简略说明

apache mod_rewrite是一个可以钻研得非常深的东西,但是你也可以非常简单的使用它。
下面我以几个例子来说明如何在apache中配置mod_rewrite

0.目录

1. 如何把 http://www.host.com/sample.php?city=bj&id=69632 这样的url用 http://www.host.com/s_bj_69632.html 这样的方式呈现给用户
2. 如何将 http://www.host123.com/ 域名的访问,全部定向到 http://www.host.com
3. 如何将 http://***.host.com/ 这样的地址根据不同的***,指向不同的路径
4. 如何调试你的配置
5. 如何设置apache作为代理服务器,这个和rewrite无关,但是有时候也会用到

1. 如何把 http://www.host.com/sample.php?city=bj&id=69632 这样的url用 http://www.host.com/s_bj_69632.html 这样的方式呈现给用户

<VirtualHost *>
    ...
   
    RewriteEngine on        # 这一行表示打开rewrite功能,当然需要apache安装了mod_rewrite
    RewriteRule ^/s_(.*)_(.*).html /sample.php?city=$1&id=$2 [L]
# $1和$2分别表示正则表达式中匹配的内容
# [L]表示如果这条规则匹配成功了,就不再继续匹配下面的规则了,也就是说RewriteRule可以有多条,通常为了避免出错,建议大家都加上 [L] 标记
# 如果把[L]写成[R, L],那么,当用户在地址栏输入 http://www.host.com/s_bj_69632.html 这样的连接时,会自动跳转到 http://www.host.com/sample.php?city=bj&id=69632,这个根据具体的应用需求来定就可以了。

    ...
</VirtualHost>

2. 如何将 http://www.host123.com/ 域名的访问,全部定向到 http://www.host.com

<VirtualHost *>
    ...
   
    RewriteEngine on
    RewriteRule ^/(.*) http://www.host.com/$1 [L,R,NE]
# NE表示对$1不要进行url编码。如果没有这个参数,会导致重复编码。
# 注意 rewrite不要求 www.host123.comwww.host.com 在同一台服务器

    ...
</VirtualHost>

3. 如何将 http://***.host.com/ 这样的地址根据不同的***,指向不同的路径

<VirtualHost *>
    ...

    RewriteEngine on
    RewriteMap lowercase int:tolower        # 转化为小写
    RewriteMap vdomain txt:/usr/local/etc/city.txt
# 设置映射的配置文件(格式:文件名),/usr/local/etc/city.txt文件内容见后面
# 当我们数据量比较小的时候,使用txt就可以了,如果数据量比较大了,可以使用dbm文件格式来提高效率

    RewriteCond %{SCRIPT_FILENAME} !^/cgi-bin/
# 为了安全,包含cgi-bin这样的url不进行处理

    RewriteCond ${lowercase:%{HTTP_HOST}} ^([^:]+)
#将域名转化为小写

    RewriteCond ${vdomain:%1} ^(.+)$
#在vdomain指定的文件中寻找对应值,后面用%1代表

    RewriteRule ^(.*)$ /%1/$1 [L,NE]
# %1 表示上面对应的路径

    ...
</VirtualHost>

/usr/local/etc/city.txt文件内容
bj   /usr/local/apache/htdocs/city/010
sh   /usr/local/apache/htdocs/city/021
gz   /usr/local/apache/htdocs/city/020

这样使用 http://bj.host.com 访问时,他实际的路径是 /usr/local/apache/htdocs/city/010 而不是 /usr/local/apache/htdocs 了

4. 如何调试你的配置

我们经常发现配置不能按预想的执行,但是又不只到错误在那里
在配置中增加两行记录log

    RewriteLog "/usr/local/apache/logs/rewrite.log"
# log文件名
    RewriteLogLevel 1
# log级别,从0到9,0表示关闭log,数越大log越详细。同时对apache消耗越大,正式服务中应该关闭log。

5. 如何设置apache作为代理服务器,这个和rewrite无关,但是有时候也会用到

首先要apache安装mod_proxy
然后再配置中添加
    ProxyPass /bj/ http://bj.host.com/
    ProxyPassReverse /bj/ http://bj.host.com/
   
这样在用户访问 http://www.host.com/bj/ 时,就如同访问 http://bj.host.com/ 一样了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值