本站首页    管理页面    写新日志    退出


天堂之光 人间希望

你我共同品味

JAVA的浓香.

Linux的清芬.

«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


我的分类(专题)

日志更新

最新评论

留言板

链接

联系我

msn:zhanglincon@hotmail.com


Blog信息
blog名称:
日志总数:99
评论数量:281
留言数量:4
访问次数:808644
建立时间:2005年11月17日




[Apache]使用Apache的URL Rewrite配置多用户虚拟服务器 二级域名的实现
文章收藏,  软件技术

zhanglincon 发表于 2008/1/25 14:33:24

先说一下目的。我想做到的是用户在浏览器中输入类似 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的虚拟主机的设定。 #*.com,*.osall.net  <VirtualHost *:80>      ServerAdmin webmaster@osall.com      DocumentRoot /home/www/www.osall.com      ServerName dns.osall.com      ServerAlias dns.osall.net osall.com osall.net *.osall.com *.osall.net      CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/osa/a_wosa_log.%Y%m%d 86400" common      ErrorLog "|/usr/sbin/rotatelogs /var/log/httpd/osa/e_wosa_log.%Y%m%d 86400"      <Directory /home/www/www.osall.com>            AllowOverride None            Order deny,allow            #AddDefaultCharset GB2312      </Directory>      <IfModule mod_rewrite.c>          RewriteEngine on          RewriteCond %{HTTP_HOST}        ^[^.]+\.osall\.(com|net)$          RewriteRule ^(.+)               %{HTTP_HOST}$1  [C]          RewriteRule ^([^.]+)\.osall\.(com|net)(.*)$ /home/www/www.osall.com/sylvan$3?un=$1&%{QUERY_STRING}      [L]      </IfModule>  </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服务器,测试一下,就大功告成了!


阅读全文(2289) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.031 second(s), page refreshed 144779007 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号