2010-03-12 28 views
2

我的问题如下:我有JBoss 4.2.3应用服务器,在Windows下的一台主机上运行AJP 1.3连接器(我的测试环境为192.168.1.2)和Apache 2.2.14在另一个FreeBSD盒子上运行(192.168.1.10)。 Apache作为所有请求的“前门”,并通过mod_jk将它们发送给JBoss。一切工作正常,直到我不得不做一些SEO优化。这些优化包括海基会网址,所以我决定使用mod_rewrite for Apache在发送给JBoss之前修改请求。基本上,我NEDD实现2个规则:为Apache 2.2和JBoss 4.2.3配置mod_rewrite和mod_jk

这里是我的测试虚拟主机的Apache配置:

<VirtualHost *:80> 
ServerAdmin [email protected] 
DocumentRoot "/usr/local/www/dummy" 
ServerName 192.168.1.10 

<IfModule mod_rewrite.c> 

    RewriteEngine On 

    RewriteRule /directory/(.*) /$1 [R=permanent,L] 
    RewriteRule ^/([^/]+)/([0-9]+)/?$ /$1/view.htm?id=$2 

</IfModule> 

JkMount  /*  jsp-hostname 

ErrorLog "/var/log/dummy-host.example.com-error_log" 
CustomLog "/var/log/dummy-host.example.com-access_log" common 
</VirtualHost> 

的问题是,第二重写规则不起作用。请求转入JBoss不变,所以我得到Tomcat 404错误。但是,如果我添加重定向标志到第二条规则,如

RewriteRule ^/([^/]+)/([0-9]+)/?$ /$1/view.htm?id=$2 [R,L] 

它的工作原理就像一个魅力。但重定向不是我需要的:)。我怀疑问题是请求被转发到另一个主机(192.168.1.2),但我真的不知道如何使它工作。任何帮助将不胜感激:)

回答

2

你的第二个重写规则不起作用的原因是你使用'?'在你的URI定义中,URI定义从不包含分隔符'?'。 所以只需使用没有它的重写规则。例如。

RewriteRule ^/([^/]+)/([0-9]+)/$ /$1/view.htm?id=$2 [R,L] 
0

简单地说,没有工作,因为第一RewriteRule[L]在年底,这意味着是最后的规则来处理。