7

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

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

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 标记为 https 连接设置和运行 SSL;

<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在浏览器中输入内容,然后照常获取我的网站。url 似乎没有改变http://www.mydomain.com,当我开始访问安全区域时,我收到不安全的警告,mydomain.com并且正在为我提供来自其他名为的网站的证书www.mydomain.com(为什么这根本是一个问题,它不能只使用一些逻辑来实现它的同一个站点,我不知道!)。

我是否将 mod_rewrite 规则放在错误的位置?我读过它应该可以工作,重写应该将 url 更改为 www。然后传递给 mod_jk 的东西以获取更多信息?

4

1 回答 1

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 请求重定向https://example.com/foohttps://www.example.com/foo301 http 状态。

于 2011-03-23T13:20:43.590 回答