Pergunta

Relacionado a algumas das minhas perguntas anteriores.

Agora tenho uma configuração que gosto bastante;

Apache httpd ouvindo na porta 80 aceitando conexões http e https. Várias instâncias do Tomcat em execução em várias portas AJP.

Mod_Jk está enviando diferentes solicitações de url para diferentes instâncias do tomcat;

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

Isso é obtido com a seguinte configuração em httpd.conf (ou sub-arquivos incluídos);

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>

E tudo isso funciona muito bem. Também tenho SSL configurado e funcionando para conexões https usando uma tag VirtualHost semelhante;

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

O que estou tendo problemas agora é que meu certificado SSL é apenas para www.mydomain.com e NÃO mydomain.com.

Fui aconselhado a usar as seguintes chamadas de 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]

Coloquei isso antes e depois das regras mod_jk no arquivo httpd.conf. O Apache estava reclamando no início que RewriteEngine era um comando inválido, mas isso foi embora quando me lembrei do comando LoadModule primeiro :) Agora o Apache reinicia perfeitamente, o servidor inicia e aceita solicitações e tudo funciona da maneira que costumava ... mas isso é só isso, esses comandos mod_rewrite parecem não ter efeito?

Eu digito http://mydomain.com no navegador e acabo de acessar meu site normalmente. O url não parece mudar para http://www.mydomain.com e quando eu começo a acessar as áreas protegidas, recebo avisos de que mydomain.com NÃO está protegido e está me fornecendo um certificado de outro site chamado www.mydomain.com (por que isso é um problema e pode? apenas use alguma lógica para perceber que é o mesmo site, não sei!).

Estou colocando as regras do mod_rewrite no lugar errado? Eu li que deve funcionar, as reescritas devem mudar o url para www. e depois passar para o mod_jk para mais alguma coisa?

Foi útil?

Solução

Coloque este snippet logo após a última linha jkmount na sua configuração do 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>

O que esta regra está fazendo é o esquema SE for https e seu host http NÃO www.mydaomain.com ENTÃO redirecionar a solicitação https://example.com/foo para https://www.example.com/foo com um 301status http.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top