前面介绍了《Windows下安装Apache Http Server》和《Windows下Apache整合Tomcat》,本文将将以具体的示例来说明如何使用Apache配合Tomcat实现动态二级域名的设置。注意:本文是在前面两篇文章的基础上接着继续介绍,如果你还没有看前面的文章,请您先移步去看安装和配置!
1、泛域名解析
首先在域名服务器上设置域名的泛解析,例如:
www.pihai.me 123.456.789.0
*.pihai.me 123.456.789.0
本地测试可以通过在windows上通过设置C:\windows\system32\drivers\etc\hosts文件模拟域名解析过程。下面的配置均以pihai.me为例。
- 127.0.0.1 bbs.pihai.me
- 127.0.0.1 blog.pihai.me
- 127.0.0.1 test1.blog.pihai.me
- 127.0.0.1 test2.blog.pihai.me
2、修改httpd.conf文件进行转发配置
放开如下modules,在httpd.conf中找到下面的配置,去掉前面的注释“#”号
- LoadModule proxy_module modules/mod_proxy.so
- LoadModule proxy_http_module modules/mod_proxy_http.so
- LoadModule rewrite_module modules/mod_rewrite.so
- LoadModule vhost_alias_module modules/mod_vhost_alias.so
在httpd.conf末尾引入增加虚拟主机文件:
include conf/httpd-vhosts.conf
在上面的配置中实现了两种解析方式,同时网页地址栏的信息没有发生变化
(1)实现bbs.pihai.me定向到 http://localhost/test/LoadInfo?key=bbs。适用于网站上不同模块间的配置。
(2)实现test1.blog.pihai.me定向到 http://localhost/test/LoadInfo?key=test1,适用于blog等系统。
具体的转发规则将在后续的文章中进行讲解。
3、在conf下新建配置httpd-vhosts.conf文件;并添加如下内容
- <VirtualHost *:80>
- ServerAdmin service@pihai.me
- DocumentRoot D:\apache-tomcat-6.0.29\webapps\ROOT
- ServerName www.pihai.me
- ServerAlias *.pihai.me
- JkMountCopy On
- ErrorLog logs/all-sites-error.log
- CustomLog logs/all-sites-access.log common
- RewriteEngine On
- # (1)下面三行实现动态解析 二级域名
- RewriteCond %{HTTP_HOST} ^[a-z0-9\-]+\.pihai\.me$
- RewriteRule ^/(.*)$ /%{HTTP_HOST}/$1
- RewriteRule ^/([a-z0-9\-]+)\.pihai\.me/?$ /test/LoadInfo?key=$1 [L,PT]
- RewriteCond %{HTTP_HOST} ^[a-z0-9\-]+\.blog\.pihai\.me$
- RewriteRule ^/(.*)$ /%{HTTP_HOST}/$1
- RewriteRule ^/([a-z0-9\-]+)\.blog\.pihai\.me/?$ /test/LoadInfo?key=$1 [L,PT]
- <Directory “D:\apache+tomcat+mod-jk\webapps\test”>
- Options FollowSymLinks
- AllowOverride None
- Order allow,deny
- Allow from all
- </Directory>
- </VirtualHost>
在上面的配置中实现了两种解析方式,同时网页地址栏的信息没有发生变化
(1)实现bbs.pihai.me定向到 http://localhost/test/LoadInfo?key=bbs。适用于网站上不同模块间的配置。
(2)实现test1.blog.pihai.me定向到 http://localhost/test/LoadInfo?key=test1,适用于blog等系统。
具体的转发规则的正则设置将在后续的文章中进行讲解。
5、访问测试
为了更好的测试具体效果,我用Servlet根据获取到的Key值然后再做个跳转。
- import java.io.IOException;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- /**
- * Servlet implementation class LoadInfo
- */
- public class LoadInfo extends HttpServlet {
- private static final long serialVersionUID = 1L;
- public LoadInfo() {
- }
- protected void doGet(HttpServletRequest request,
- HttpServletResponse response) throws ServletException, IOException {
- this.doPost(request, response);
- }
- protected void doPost(HttpServletRequest request,
- HttpServletResponse response) throws ServletException, IOException {
- // 获取请求中的Key值
- String key = request.getParameter(“key”);
- // 转发页默认为404
- String toUrl = “404.jsp”;
- // 如果key值不为空,转发到index_key.jsp页面
- if(null!=key && !“”.equals(key)){
- // 此处需要加载相关要显示的数据
- System.out.println(“此处需要加载相关要显示的数据…”);
- toUrl = “index_”+key+“.jsp”;
- }
- request.getRequestDispatcher(toUrl).forward(request, response);
- }
- }
(2)在WebContent下新建index_bbs.jsp、index_blog.jsp,index_test1.jsp、index_test2.jsp
(3)发布应用并重启apache
(4)在浏览器中分别输入bbs.pihai.me,blog.pihai.me test1.pihai.me进行测试。