使用Apache的URL Rewrite配置多用户虚拟服务器 二级域名

http://strangebank.bokee.com/viewdiary.16292545.html

 

前两天为了让Sylvan的用户能够更方便的记忆自己的个人空间的地址,研究了一下Apache的URL Rewrite功能,实现了每个用户可以把自己的用户名作为二级域名的虚拟主机的设定。

其实,之前也用过URL Rewrite模块,只不过只是用来转换URL中传入的参数的。这次用它来做虚拟主机,其实原理是一样的。

先说一下目的。我想做到的是用户在浏览器中输入类似 http://wells .osall.com/test.php?a=1&b=2  这样的URL地址时,把蓝色部分的用户名作为一个参数并转到页面在服务器上的真正的实际地址 /path/to/file/test.php?un=wells &a=1&b=2  ,并且要让用户在浏览器中看到的URL地址不发生改变。

要实现这个功能,首先要在DNS服务器上打开域名的泛域名解析(自己做或者找域名服务商做)。比如,我就把 *.osall.net 和 *.osall.com全部解析到了我的这台Linux Server上。

然后,看一下我的Apache中关于*.osall.com的虚拟主机的设定。

  1. #*.com,*.osall.net  
  2. <VirtualHost *:80 >  
  3.     ServerAdmin webmaster@osall.com  
  4.     DocumentRoot /home/www/www.osall.com  
  5.     ServerName dns.osall.com  
  6.     ServerAlias dns.osall.net osall.com osall.net *.osall.com *.osall.net  
  7.     CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/osa/a_wosa_log.%Y%m%d 86400"  common  
  8.     ErrorLog "|/usr/sbin/rotatelogs /var/log/httpd/osa/e_wosa_log.%Y%m%d 86400"  
  9.     <Directory  /home/www/www.osall.com >  
  10.           AllowOverride None  
  11.           Order deny ,allow  
  12.           #AddDefaultCharset GB2312  
  13.     </Directory>  
  14.     <IfModule mod_rewrite.c >  
  15.         RewriteEngine on  
  16.         RewriteCond %{HTTP_HOST}        ^[^.]+\.osall\.(com|net)$  
  17.         RewriteRule ^(.+)               %{HTTP_HOST}$1  [C]  
  18.         RewriteRule ^([^.]+)\.osall\.(com|net)(.*)$ /home/www/www.osall.com/sylvan$3?un=$1&%{QUERY_STRING}      [L]  
  19.     </IfModule>  
  20. </VirtualHost>




在这段设定中,我把*.osall.net和*.osall.com 的Document Root都设定到了 /home/www/www.osall.com
但是,继续看下去,看到
<IfModule mod_rewrite.c >...</IfModule> 配置了吗?在这里我就配置了URL Rewrite规则。


RewriteEngine on   #打开URL Rewrite功能
RewriteCond %{HTTP_HOST} ^[^.]+.osall.(com|net)$  #匹配条件,如果用户输入的URL中主机名是类似 xxxx.osall.com 或者 xxxx.osall.net 就执行下面一句
RewriteRule ^(.+) %{HTTP_HOST}$1 [C]   #把用户输入完整的地址(GET方式的参数除外)作为参数传给下一个规则,[C]是Chain串联下一个规则的意思
RewriteRule ^([^.]+).osall.(com|net)(.*)$ /home/www/dev.osall.com/sylvan$3?un=$1&%{QUERY_STRING} [L]   # 最 关键的是这一句,使用证则表达式解析用户输入的URL地址,把主机名中的用户名信息作为名为un的参数传给 /home/www /dev.osall.com目录下的脚本,并在后面跟上用户输入的GET方式的传入参数。并指明这是最后一条规则([L]规则)。注意,在这一句中指明 的重写后的地址用的是服务器上的绝对路径,这是内部跳转。如果使用http://xxxx这样的URL格式,则被称为外部跳转。使用外部跳转的话,浏览着 的浏览器中的URL地址会改变成新的地址,而使用内部跳转则浏览器中的地址不发生改变,看上去更像实际的二级域名虚拟服务器。

这样设置后,重起Apache服务器,测试一下,就大功告成了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值