|
天堂之光 人间希望
你我共同品味
JAVA的浓香.
Linux的清芬. |
« | August 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 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服务器,测试一下,就大功告成了! |
|
|