如何在Apache中使用mod_rewrite - > mod_jk - > tomcat设置?

时间:2011-03-23 10:45:09

标签: apache tomcat mod-rewrite mod-jk

与我之前的一些问题相关。

我现在有一个非常喜欢的设置;

Apache httpd侦听端口80接受http和https连接。 在几个AJP端口上运行的几个Tomcat实例。

Mod_Jk正在向不同的tomcat实例发送不同的url请求;

www.mydomain.com/demo -> tomcat:8101
www.mydomain.com/test -> tomcat:8102
www.mydomain.com/     -> tomcat:8100

这是通过httpd.conf中的以下配置(或包含的子文件)实现的;

LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel info

NameVirtualHost *:80

<VirtualHost *:80>
    JkMount /demo* demoTomcat (workers.properties not shown)
    JkMount /test* testTomcat
    JkMount /* rootTomcat
</VirtualHost>

这一切都很棒。我还使用类似的VirtualHost标记进行SSL设置并运行https连接;

<VirtualHost _default_:443>
    JkMount /demo* demoTomcat 
    JkMount /test* testTomcat
    JkMount /* rootTomcat
... SSL Stuff follows ....

我现在遇到的问题是我的SSL证书仅适用于www.mydomain.com而不是mydomain.com。

我被建议使用以下mod_rewrite调用;

Options +FollowSymlinks
LoadModule rewrite_module modules/mod_rewrite.so
RewriteEngine On
RewriteCond %{HTTP_HOST} !^(www\.|$) [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [PT,L]

我已经在httpd.conf文件中的mod_jk规则之前和之后放置了这些。 Apache首先抱怨RewriteEngine是一个无效的命令,但是当我第一次记住LoadModule命令时它就消失了:)现在Apache重新启动就好了,服务器启动并接受请求,一切都按照它使用的方式工作......但那就是就这样,这些mod_rewrite命令似乎没有效果?

我在浏览器中输入http://mydomain.com,我按照正常情况获取我的网站。该网址似乎没有更改为http://www.mydomain.com,当我开始访问安全区域时,我收到警告mydomain.com不受保护,并且正在向我提供其他名为www.mydomain.com的网站的证书(为什么这是一个问题,它不能只是用一些逻辑来实现它的同一个网站,我不知道!)。

我将mod_rewrite规则放在错误的位置吗?我已经读过它应该可以工作,重写应该将URL更改为www。然后再转到mod_jk的东西?

1 个答案:

答案 0 :(得分:2)

在apache配置中将此代码段放在最后一个jkmount行后面

    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{HTTPS} =on
        RewriteCond %{HTTP_HOST} !^www\.example\.name$ [NC]
        RewriteRule ^ https://www.example.name%{REQUEST_URI} [NE,L,R=301]
    </IfModule>

此规则的作用是 IF 方案为https且您的http主机 www.mydaomain.com 那么重定向请求{{ 1}}到https://example.com/foo,状态为301 http。