我有 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 返回的页面。
这可能吗?如何做到的?
也有类似的问题被问到堆栈溢出然而,如果可能的话,我愿意在 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 站点中的普通目录,并且被正确重写。
谢谢大家
答案1
经过长时间的搜索,我找到了这个问题的答案。
必须将重写指令全局放置在(虚拟)主机上,而不是放置在 .htaccess 中。Apache 似乎实际上不会解析这些文件,因为 mod_jk 提供的文件不属于该结构;如果您仔细想想,这是有道理的。但是,它将应用适用于整个主机的 mod_rewrite 规则。
答案2
抱歉,无法评论,我是新来的……您能给出一个 mod_jk 返回的示例 URL 吗?看起来正则表达式不适合返回的页面。
尝试全部重定向至http://server.example/redirect.html:
RewriteRule .* http://server.example/redirect.html [R=301,L]
如果这有效,那么就是正则表达式给你带来了麻烦。
让我稍微解释一下。
你有一个如下的 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使用
RewriteRule somesite.* http://server.example/redirect.html [R=301,L]
答案3
抱歉,无法评论,但为了回应你的回答 Antitribu,你也可以将重写语句放在上下文中<Location>
。有一个很好的Apache 手册中描述了何时使用 <File>、<Location>、.htaccess 等的部分。