我有 2 台服务器,Apache 和 Jboss。使用 JKmount .war 文件被挂载并呈现一个复杂的站点。
例如:
JkMount /directory/* ajp13
Alias /directory /jboss/server/default/deploy/directory.war
<Directory /jboss/server/default/deploy/directory.war>
Order allow,deny
allow from all
Options -Indexes
</Directory>
<Directory /jboss/server/default/deploy/directory.war/WEB-INF>
deny from all
</Directory>
我想在 Apache 端使用 mod_rewrite 来更改 mod_jk 返回的 URL。
例如:
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^192.168.1.1$
RewriteRule /.* http://server.example/redirect.html [R=301,L]
目前上述代码只影响 Apache 返回的图片,不影响 mod_jk 返回的页面。
这可能吗?它是如何完成的?
StackOverFlow上有一个类似的问题,但是如果可以选择我想在 Apache 内部处理这个问题而不改变 Jboss 配置。
服务器是 OpenSuse 11.1,我怀疑可能存在一些模块优先顺序问题,但我无法确认这一点。
URL 示例如下:
http://site.example/directory/index.jsp
http://site.example/foo/other.html
在此示例中,第一个 URL 使用上面配置中列出的指令安装在 mod_jk 中,并且不会被 mod_rewrite 重写。第二个 URL 是 Apache 站点中的普通目录,并且已正确重写。
谢谢大家
经过长时间的搜索,我找到了这个问题的答案。
对于不在.htaccess 或.htaccess 中的(虚拟)主机,重写指令必须全局放置。Apache 似乎并没有真正解析这些文件,因为从 mod_jk 提供的文件不是该结构的一部分;如果您考虑一下,这是有道理的。但是,它将应用适用于整个主机的 mod_rewrite 规则。
抱歉不能发表评论,我是新来的……你能给出一个从 mod_jk 返回的示例 url。看起来正则表达式不适合返回的页面。
尝试将所有重定向到http://server.example/redirect.html:
如果这行得通,它的正则表达式,这给你带来了麻烦。
让我稍微解释一下。
你有一个看起来像这样的 URI:http: //foo.bar.com/anything
您的正则表达式
(/.*)
现在正在搜索斜线后跟一些东西。但是在 Uri 中,“任何东西”中都没有 /。如果您有图像:例如
http://foo.bar.com/images/image.png比 images/image.png 中的 / 和正则表达式匹配并进行重定向。
如果要将某个站点重定向到另一个服务器:
http://foo.bar.com/somesite -> http://bar.foo.com使用
抱歉,无法发表评论,但为了回应您的回答 Antitribu,您还可以将重写语句放在
<Location>
上下文中。apache 手册中有一个很好的部分描述了何时使用 <File>、<Location>、.htaccess 等。