apache中url rewrite配置多用户虚拟服务器

发布时间:2019-12-20编辑:脚本学堂
本文介绍了apache中url rewrite配置多用户虚拟服务器的方法,有关apache中虚拟服务器(虚拟主机)的配置教程,有需要的朋友参考下。

首先要在dns服务器上打开域名的泛域名解析(自己做或者找域名服务商做)。
比如把 *.jb200.com和 *.jbxue.cn全部解析到了我的这台linux server上。

然后,查看apache中关于*.jb200.com的虚拟主机的设定。
 

复制代码 代码示例:
#*.com,*.osall.net
<virtualhost *:80>
    serveradmin webmaster@jb200.com
    documentroot /home/www/www.jb200.com
    servername dns.jb200.com
    serveralias dns.jb200.com jb200.com jbxue.net *.jb200.com *.jbxue.net
    customlog /var/log/httpd/osa/access_log.log" common
     errorlog /var/log/httpd/osa/error_log.log"
<directory /home/www/www.jb200.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.jb200.com/sylvan$3?un=$1&%{query_string}      [l]     </ifmodule>
</virtualhost>

在这段设定中,把*.jbxue.net和*.jb200.com 的document root都设定到了 /home/www/www.jb200.com
但是,看到<ifmodule mod_rewrite.c>...</ifmodule>配置了吗?在这里配置url rewrite规则。

不了解url rewrite重写的朋友,可以参考:

rewriteengine on #打开url rewrite功能
rewritecond %{http_host} ^[^.]+.osall.(com|net)$ #匹配条件,如果用户输入的url中主机名是类似 xxxx.jb200.com 或者 xxxx.jbxue.cn 就执行下面一句
rewriterule ^(.+) %{http_host}$1 [c] #把用户输入完整的地址(get方式的参数除外)作为参数传给下一个规则,[c]是chain串联下一个规则的意思
rewriterule ^([^.]+).osall.(com|net)(.*)$ /home/www/dev.jb200.com/sylvan$3?un=$1&%{query_string} [l] #
最关键的是这一句,使用证则表达式解析用户输入的url地址,把主机名中的用户名信息作为名为un的参数传给 /home/www/dev.jb200.com目录下的脚本,并在后面跟上用户输入的get方式的传入参数。并指明这是最后一条规则([l]规则)。注 意,在这一句中指明的重写后的地址用的是服务器上的绝对路径,这是内部跳转。

如果使用http://xxxx这样的url格式,则被称为外部跳转。使用外 部跳转的话,浏览着的浏览器中的url地址会改变成新的地址,而使用内部跳转则浏览器中的地址不发生改变,看上去更像实际的二级域名虚拟服务器。

重启apache服务器,使url重写规则生效。