和我之前的问题相关。
现在我有一个我相当喜欢的设置;
Apache httpd监听端口80,接受http和https连接。多个Tomcat实例运行在多个AJP端口上。
Mod_Jk将不同的url请求发送到不同的Tomcat实例;
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>
这一切都很顺利。我还设置了SSL并使用类似的VirtualHost标签来运行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规则放错了位置?我看过应该可以工作,重写应该将网址更改为www.,然后进一步通过mod_jk处理所有内容?
<VirtualHost _default_:443>
标签结束之前。另外,您可以尝试将此行RewriteCond %{HTTPS} =on
替换为我上面回答中的这行代码:RewriteCond {SERVER_PORT} =443
。 - anubhava!
。 - anubhava!
字符,但是 SO 抱怨使用了mydomain.com
... 不想通过替换域名来大幅修改你的答案(SO 建议使用 example.com),因为它实际上准确回答了 OP 的问题... - mmuller