Pregunta

Relacionado con algunas de mis preguntas anteriores.

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 se ejecuta para conexiones https usando una etiqueta VirtualHost similar;

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

Lo que ahora tengo problemas es que mi certificado SSL es solo para www.mydomain.com y NO mydomain.com.

Me han recomendado que utilice las siguientes llamadas 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]

Los coloqué antes y después de las reglas mod_jk en el archivo httpd.conf. Apache al principio se quejaba de que RewriteEngine era un comando no válido, pero eso desapareció cuando recordé primero el comando LoadModule :) Ahora Apache se reinicia bien, el servidor se inicia y acepta solicitudes y todo funciona como solía hacerlo ... pero eso es ¿Parece que estos comandos mod_rewrite no tienen ningún efecto?

Escribo http://mydomain.com en el navegador y obtengo 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á asegurado y me está enviando un certificado de algún otro sitio web llamado www.mydomain.com (por qué esto es un problema y puede '' Solo use un poco de lógica para darse 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 mod_jk para algo más?

¿Fue útil?

Solución

Coloque este fragmento justo después de la última línea de 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 hace esta regla es SI el esquema es https y su host http es NO www.mydaomain.com ENTONCES redirecciona la solicitud https://example.com/foo a https://www.example.com/foo con un 301estado http.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top