2014-11-04 4 views
3

내부 앱 서버에 대한 역방향 프록시 역할을하는 아파치 웹 서버가 있습니다. 나는 이것을 달성하기 위해 ProxyPass와 ProxyPassReverse를 사용했다. 다른 응용 프로그램에 다중 컨텍스트 루트 매핑이 있습니다.아파치에서 URL 재 작성이 끝나면 POST 요청이 GET으로 변환됩니다. httpd

사용자가 https://mydomain.com/contextRoot 대신 https://mydomain.com으로 웹 사이트에 직접 액세스 할 수 있도록 한 컨텍스트의 도메인 이름에서 컨텍스트 루트를 제거하려고합니다. 이 컨텍스트에 대해 proxypass 및 proxypassreverse 구성 대신 다음 다시 쓰기 규칙을 추가했습니다.

# redirecting old URL to new URL 
RewriteRule ^/contextRoot(.*)$ https://mydomain.com$1 [L,R=301] 

# proxying to internal app servers 
RewriteCond %{REQUEST_URI} !^(/anotherContextRoot1.*)$ 
RewriteCond %{REQUEST_URI} !^(/anotherContextRoot2.*)$ 
RewriteRule .* http://10.1.0.1:8080/contextRoot%{REQUEST_URI} [L,P] 

이 구성은 모든 http GET 요청에 적합합니다. POST 요청의 경우 리디렉션이 발생하지만 후속 호출은 GET이됩니다.

이 문제가 발생하는 이유와 해결 방법을 알려주십시오. 또한 이전 구성에서 proxypassreverse를 사용하여 수행 한 작업을 수행하기 위해 추가 한 다시 쓰기 규칙 구성이 있는지 이해하고 싶습니다.

+0

가능한 복제본 [redirectmatch 변경 게시 됨] (http://stackoverflow.com/questions/10586779/redirectmatch-changes-post-to-get) –

답변

2

이 질문은 여기 https://softwareengineering.stackexchange.com/questions/99894/why-doesnt-http-have-post-redirect/99966#99966 대한 답변 - 짧은 요약을이 답변 HTTP 1.1에서

에서, 실제로는 상태 코드 (307)가있는 요청이 동일한 메소드를 사용하여 반복되어야하고 데이터를 게시해야 함을 나타냅니다.

다른 사람들이 말했듯이 여기에는 오용 가능성이 있습니다. 이는 많은 프레임 워크가 추상화에서 301과 302에 집착하는 이유 일 수 있습니다.

관련 문제