2010-03-12 3 views
2

문제점 : 다음은 Windows 환경 (192.168.1.2)과 Apache에서 실행되는 AJP 1.3 커넥터가있는 JBoss 4.2.3 응용 프로그램 서버입니다. 다른 FreeBSD 상자 (192.168.1.10)에서 실행중인 2.2.14. Apache는 모든 요청에 ​​대해 "프런트 게이트"역할을하며 mod_jk를 통해 JBoss에 보냅니다. 모든 SEO 최적화를 수행해야만 정상적으로 작동합니다. 이러한 최적화에는 SEF url이 포함되어 있으므로 JBoss에 보내지기 전에 Apache에서 mod_rewrite를 사용하여 요청을 변경하기로 결정했습니다. 기본적으로,이 규칙을 구현하기 위해 nedd :Apache 2.2 및 JBoss 4.2.3의 mod_rewrite 및 mod_jk 구성

  • 는 "http://hostname/directory/"을 "http://hostname/"
  • 앞으로의 URL이 최종 사용자가 '아무튼 "http://hostname/wtf/123/"을 "http://hostname/wtf/view.htm?id=123"과 같이 영구적으로 리디렉션과 같은 기존 규칙을 리디렉션 "못생긴"URL (실제 재 작성)을보십시오.

    <VirtualHost *:80> 
    ServerAdmin [email protected] 
    DocumentRoot "/usr/local/www/dummy" 
    ServerName 192.168.1.10 
    
    <IfModule mod_rewrite.c> 
    
        RewriteEngine On 
    
        RewriteRule /directory/(.*) /$1 [R=permanent,L] 
        RewriteRule ^/([^/]+)/([0-9]+)/?$ /$1/view.htm?id=$2 
    
    </IfModule> 
    
    JkMount  /*  jsp-hostname 
    
    ErrorLog "/var/log/dummy-host.example.com-error_log" 
    CustomLog "/var/log/dummy-host.example.com-access_log" common 
    </VirtualHost> 
    

    문제는 두 번째 재 작성 규칙이 작동하지 않는다는 것입니다 :

여기에 테스트 가상 호스트에 대한 내 아파치 설정입니다. 요청이 JBoss에 그대로 변경되지 않으므로 Tomcat 404 오류가 발생합니다. 그러나 리디렉션 플래그를 두 번째 규칙에 추가하면

RewriteRule ^/([^/]+)/([0-9]+)/?$ /$1/view.htm?id=$2 [R,L] 

과 같이 작동합니다. 그러나 리디렉션은 내가 여기에 필요한 것이 아닙니다. :) 문제는 요청이 다른 호스트 (192.168.1.2)로 전달된다는 것이지만 실제로 작동하게하는 방법에 대해서는 전혀 모른다. 어떤 도움을 주시면 감사하겠습니다 :)

답변

2

두 번째 다시 쓰기 규칙이 작동하지 않는 이유는 '?' URI 정의에 URI 정의에 구분 기호 '?'가 포함되어 있지 않습니다. 간단히 다시 쓰기 규칙을 사용하십시오. 예. 첫 번째 RewriteRule가 처리 할 수있는 마지막 규칙을 의미 끝에서 [L]을 가지고 있기 때문에

RewriteRule ^/([^/]+)/([0-9]+)/$ /$1/view.htm?id=$2 [R,L] 
0

은 단순히 작동하지 않습니다.