2011-03-23 4 views
7

이전 질문 중 일부와 관련이 있습니다.Apache에서 mod_rewrite를 사용하는 방법 -> mod_jk -> tomcat 설정?

이제는 설정이 좋아졌습니다.

아파치 httpd는 http 및 https 연결을 허용하는 포트 80에서 수신 대기합니다. 여러 AJP 포트에서 실행중인 여러 Tomcat 인스턴스.

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> 

그리고이 모든 것이 훌륭합니다. 나는 또한 비슷한 VirtualHost 태그를 사용하여 https 연결을 위해 SSL 설정 및 실행을하고있다. 내가 지금하는 데 문제가 무엇

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

내 SSL CERT는 만 www.mydomain.com 및 NOT 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가 다시 시작되고 서버가 요청을 받아들이고 모든 것이 작동하는 방식으로 작동하지만 ... thats 그냥,이 mod_rewrite 명령은 효과가없는 것처럼 보입니까?

브라우저에 http://mydomain.com을 입력하면 웹 사이트를 정상적으로 볼 수 있습니다. URL이 http://www.mydomain.com으로 변경된 것으로 보이지 않으며 보안 영역에 액세스하기 시작하면 mydomain.com이 보안되어 있지 않으며 www.mydomain.com이라는 다른 웹 사이트에서 인증서를 제공하고 있습니다 (왜 이것이 전혀 문제가 아니며 ' 그것의 동일한 위치를 깨닫기 위하여 다만 몇몇 논리를 사용하지 말라, 나는 모른다!

mod_rewrite 규칙을 잘못된 위치에 배치합니까? 나는 그것이 작동해야한다고 읽었고, 다시 쓰기는 URL을 www로 바꿔야한다. 그런 다음 mod_jk 파일을 통해 더 이상 아무것도 전달하지 않습니까?

답변

2

장소 아파치 설정에서 바로 마지막 jkmount 라인 후이 조각 : 무엇이 규칙이하고있는 것은 체계는 HTTPS이고 당신의 HTTP 호스트가 THEN하지www.mydaomain.com입니다 경우입니다

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

리디렉션 요청 https://example.com/foo ~ https://www.example.com/foo은 301 http 상태입니다.

+0

VirtualHost 태그 안에 있습니까? –

+0

예 VirtualHost 태그 안에 있습니다. – anubhava

+0

@Nick Foote : 다시 작성한 규칙이 효과가 있습니까? – anubhava