/ 中存储网

Apache和tomcat服务器二级域名和url重写的详细步骤

2013-08-30 09:49:09 来源:IT技术网

打开文件httpd.conf文件(apache目录下面的文件)

以apache2.2.3设置为例,配置虚拟主机下的rewrite

在主目录里面需要添加代码AllowOverride Options FileInfo

取消 LoadModule rewrite_module modules/mod_rewrite.so前面的 #

RewriteEngine On

RewriteRule ^(.*)show-([d]+)-([d]+).html$ $1/leafage.jsp?id=$2&page=$3

RewriteRule ^(.*)list-([d]+)-([d]+).html$ $1/list.jsp?id=$2&page=$3

RewriteRule ^(.*)show-([d]+).html$ $1/show.jsp?id=$2

RewriteRule ^(.*)area-([d]+)-(.+).html$ $1/area.jsp?id=$2&page=$3

重新启动Apache.

//经过上面的测试Tomcat和Apache可以通了

上面的配置还可以在虚拟主机里配置:如下:

原来配置:

apache httpd.conf

include "conf/mod_jk.conf"

mod_jk.conf:

LoadModule jk_module modules/mod_jk-1.2.23-apache-2.2.x-linux-i686.so

JkWorkersFile conf/workers.properties

JkLogFile logs/mod_jk.log

JkLogLevel error

JkMount /*.jsp controller

JkMount /*.do controller

JkMount /*userAction.zip controller

...

JkMount /*.jar controller

JkMount /*.htm controller

JkMount /servlet/* controller

...........

作为虚拟主机配置文件httpd-vhost.conf的全局配置:

LoadModule jk_module modules/mod_jk-1.2.23-apache-2.2.x-linux-i686.so

JkWorkersFile conf/workers.properties

JkLogFile logs/mod_jk.log

JkLogLevel error

NameVirtualHost *:80

...

include "/usr/local/apache22/conf/mod_jk.conf"

同样上面的伪静态也可写在虚似主机里面如下:

DocumentRoot /home/www_php168

ServerName

RewriteEngine On

RewriteRule ^(.*)/list-([0-9]+)-([0-9]+).htm$ $1/list.php?fid=$2&page=$3

RewriteRule ^(.*)/bencandy-([0-9]+)-([0-9]+)-([0-9]+).htm$ $1/bencandy.php?

fid=$2&id=$3&page=$4

但是:伪静态时,show-100-33.html明明是要先转变成leafage.jsp?id=100&page=33的

可是Apache做了析解之后没有交给Tomcat处理也就是说伪静态也析解了,就是没有给Tomcat处理。

最后在上面的文章里面看到在RewriteRule最加下[PT]如下:

RewriteRule ^(.*)show-([d]+)-([d]+).htm $1/leafage.jsp?id=$2&page=$3[PT]

看来对RewriteRule参数还要研究

今天晚上折腾了一晚上终于把我们网站的二级域名问题和二级域名相关的问题解决了。并更新上去了。呵呵,小小总结一下。

第一部分,我的二级域名转向是在apache上配置的(其中的规则把我折腾了好几天)。

# JkMount /* worker1(用这个不能实现二级域名跳转,只有分着jKmount才能行,原因不明。自己认为是如设置成该种形式,表示所有的情况都给tomcat处理,包括二级域名的解析)

JkMount /dwr/* worker1

JkMount /dwr/interface/* worker1

JkMount /*.jsp worker1

JkMount /*.do worker1

JkMount /*.html worker1

JkMount /*.htm worker1

DirectoryIndex index.jsp index.html

Options Indexes FollowSymLinks

AllowOverride none

Order allow,deny

Allow from all

DirectoryIndex index.jsp index.html welcome.jsp

RewriteEngine On

RewriteCond %{HTTP_HOST} !^(www|web).automation.com.cn$

RewriteRule ^/?$ /%{HTTP_HOST} (这一步很重要是把url链接改变成隐含参数的/bd.automation.com.cn的形式)

RewriteRule ^/bd.automation.com.cn$ /industry.do?method=showIndustry&industryname=louyu [L] RewriteCond %{HTTP_HOST} !^(www|web).automation.com.cn$

RewriteRule (.*) /%{HTTP_HOST}/$1(这里url链接里面的参数是显示的,所以可以在下面那个规则中得到。这里费了我很长时间,真的觉得自己很笨,呵呵!)

RewriteRule ^/bd.automation.com.cn/([a-zA-Z]+)$ /industry.do?method=getList&mainname=louyu&name=$1 [L]

ServerAdmin [email protected]

DocumentRoot "/usr/apps/apache-tomcat-6/apps/ROOT"

ServerName www.automation.com.cn

ServerAlias automation.com.cn

ErrorLog "logs/www.automation.com.cn-error_log"

CustomLog "logs/www.automation.com.cn-access_log" common

第二部分:在程序中用urlrewriter。jar包重写。其中和二级域名系相关的规则是

bd.automation.com.cn(这一点很重要,只有在匹配二级域名的时候起作用)

^/-do--list--id-(d+).html$

/communityDetail.do?method=showArticleList&id=$1

第三部分:在程序中的链接中用程序控制二级域名相关的链接 用硬连接的形式改写。

public static String getUrl(HttpServletRequest request){

int ind = request.getRequestURL().toString().indexOf("/", 7);

String preurl = "";

if (ind == -1) {

preurl = "http://www.automation.com.cn";

} else {

preurl = request.getRequestURL().toString().substring(0, ind);

}

if (preurl.equals("http://bd.automation.com.cn")) {

preurl = "http://www.automation.com.cn";

}

return preurl;

}

在页面中

if "http://www.automation.com.cn".equals(preurl)

二级域名相关链接

else

正常没有重新的连接