2011-03-23 19 views
7

relacionado con algunas de mis preguntas anteriores.Cómo usar mod_rewrite con Apache -> mod_jk -> configuración de tomcat?

Ahora tengo una configuración que me gusta bastante;

Apache httpd escuchando en el puerto 80 aceptando conexiones http y https. Varias instancias de Tomcat que se ejecutan en varios puertos AJP.

Mod_Jk está enviando diferentes solicitudes de URL a diferentes instancias de tomcat;

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

Esto se logra con la siguiente configuración en httpd.conf (o sub archivos incluidos);

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> 

Y todo esto funciona muy bien. También tengo la configuración de SSL y la ejecución de conexiones https usando una etiqueta VirtualHost similar;

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

Lo que estoy teniendo problemas ahora es que mi certificado SSL es sólo para www.mydomain.com y NO mydomain.com.

Me han recomendado utilizar las siguientes llamadas a 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] 

he colocado estos antes de antes y después de las reglas mod_jk en el archivo httpd.conf. Al principio, Apache se quejaba de que RewriteEngine era un comando no válido, pero desapareció cuando recordé el comando LoadModule primero :) Ahora Apache se reinicia muy bien, el servidor inicia y acepta solicitudes y todo funciona de la forma en que lo hace ... pero eso es simplemente, estos comandos mod_rewrite parecen no tener ningún efecto?

Escribo http://mydomain.com en el navegador y acabo de obtener mi sitio web como de costumbre. La url no parece cambiar a http://www.mydomain.com y cuando comienzo a acceder a las áreas seguras recibo advertencias de que mydomain.com NO está seguro y me está sirviendo un certificado de algún otro sitio web llamado www.mydomain.com (¿por qué esto es un problema y puede hacerlo? ¡Solo uso un poco de lógica para darme cuenta de que es el mismo sitio, no lo sé!).

¿Estoy colocando las reglas de mod_rewrite en el lugar incorrecto? He leído que debería funcionar, las reescrituras deberían cambiar la URL a www. y luego pasar a las cosas mod_jk para nada más?

Respuesta

2

Coloque este fragmento justo después de la última línea JkMount en su configuración de Apache:

<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> 

Lo que esta regla está haciendo es SI esquema es https y su anfitrión http es NOwww.mydaomain.comENTONCES redirigir solicitud https://example.com/foo a https://www.example.com/foo con un estado http 301.

+0

dentro de las etiquetas VirtualHost? –

+0

sí dentro de las etiquetas de VirtualHost. – anubhava

+0

@Nick Foote: ¿Esa regla de reescritura funciona para usted? – anubhava

Cuestiones relacionadas