为Apache 2.2和JBoss 4.2.3配置mod_rewrite和mod_jk

时间:2010-03-12 06:34:43

标签: apache mod-rewrite jboss mod-jk

我的问题如下:我有JBoss 4.2.3应用服务器,在Windows下的一个主机上运行AJP 1.3连接器(我的测试环境为192.168.1.2),另一个FreeBSD盒上运行Apache 2.2.14(192.168.1.10) )。 Apache充当所有请求的“前门”,并通过mod_jk将它们发送到JBoss。一切都很好,直到我不得不做一些SEO优化。这些优化包括SEF url,所以我决定使用mod_rewrite for Apache在发送给JBoss之前更改请求。基本上,我需要实施2条规则:

以下是我的测试虚拟主机的Apache配置:

<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
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>

问题是第二次重写规则不起作用。请求没有变化,因此我得到了Tomcat 404错误。但是,如果我将重定向标志添加到第二个规则,如

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

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

2 个答案:

答案 0 :(得分:2)

你的第二次重写规则不起作用的原因是你使用'?'在您的URI定义中,URI定义从不包含分隔符“?”。 所以简单地使用没有它的重写规则。例如

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

答案 1 :(得分:0)

简单地说,不起作用,因为第一个RewriteRule最后有[L],这意味着要处理的最后一条规则。