2

我的问题如下:我有 JBoss 4.2.3 应用服务器和 AJP 1.3 连接器在 Windows 下的一台主机上运行(我的测试环境为 192.168.1.2),Apache 2.2.14 在另一个 FreeBSD 机器上运行(192.168.1.10)。Apache 充当所有请求的“前门”,并通过 mod_jk 将它们发送到 JBoss。一切正常,直到我不得不做一些 SEO 优化。这些优化包括 SEF url,所以我决定使用 Apache 的 mod_rewrite 来更改请求,然后再将它们发送到 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>

问题是第二个重写规则不起作用。请求不变地传递给 JBoss,所以我收到 Tomcat 404 错误。但是,如果我将重定向标志添加到第二条规则中,例如

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

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

4

2 回答 2

2

The reason your second rewrite rule doesn't work is that you use the '?' in your URI definition and the URI definition never contains the separator '?'. So simply use the rewrite rules without it. eg.

RewriteRule ^/([^/]+)/([0-9]+)/$   /$1/view.htm?id=$2 [R,L]
于 2010-04-12T09:14:30.920 回答
0

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

于 2012-04-23T18:25:03.590 回答