与我之前的一些问题相关。
我现在有一个非常喜欢的设置;
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的东西?
答案 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。