2010-05-15 5 views
1

내 URL이 내 서버에서 작동하는 방식이 변경되었습니다. 내가 www.myserver.com/www.myserver.com/test에 대한 액세스를 리디렉션 내 아파치의 conf 파일에 RedirectMatch에 301을 추가 한 지금 www.myserver.com/service 대신PUT 요청에 대한 URL 다시 쓰기

www.myserver.com/test/service의 그것입니다.

나는 예를 들어 다음 URL에서의 HTTP PUT을 통해이 서버에 파일을 수신하고 있습니다 : www.myserver.com/test/service/put/myfile.xml

파일이 더 이상 도착하지 않았다 있도록 301 HTTP 상태 코드를 처리하지 않는 파일을 전송 서버를.

파일을 놓치지 않기 위해 PUT 요청일 때 URL을 다시 쓰는 방법이 있습니까?

감사합니다,

벤자민


UPDATE :

RewriteEngine on 
RewriteCond %{REQUEST_METHOD} =PUT 
RewriteRule ^/test/(.*) /$1 [PT] 

로그 :

XX.XXX.XXX.XXX - - [16/May/2010:06:33:40 +0000] [www.myserver.com/sid#7f378508aa30][rid#7f378538a828/initial] (2) init rewrite engine with requested uri /test/service/put/myfile.xml 
XX.XXX.XXX.XXX - - [16/May/2010:06:33:40 +0000] [www.myserver.com/sid#7f378508aa30][rid#7f378538a828/initial] (3) applying pattern '^/test/(.*)' to uri '/test/service/put/myfile.xml' 
XX.XXX.XXX.XXX - - [16/May/2010:06:33:40 +0000] [www.myserver.com/sid#7f378508aa30][rid#7f378538a828/initial] (4) RewriteCond: input='PUT' pattern='=PUT' => matched 
XX.XXX.XXX.XXX - - [16/May/2010:06:33:40 +0000] [www.myserver.com/sid#7f378508aa30][rid#7f378538a828/initial] (2) rewrite '/test/service/put/myfile.xml' -> '/service/put/myfile.xml' 
XX.XXX.XXX.XXX - - [16/May/2010:06:33:40 +0000] [www.myserver.com/sid#7f378508aa30][rid#7f378538a828/initial] (2) forcing '/service/put/myfile.xml' to get passed through to next API URI-to-filename handler 
XX.XXX.XXX.XXX - - [16/May/2010:06:33:40 +0000] [www.myserver.com/sid#7f378508aa30][rid#7f3785393858/subreq] (2) init rewrite engine with requested uri /service/put/myfile.xml 
XX.XXX.XXX.XXX - - [16/May/2010:06:33:40 +0000] [www.myserver.com/sid#7f378508aa30][rid#7f3785393858/subreq] (3) applying pattern '^/test/(.*)' to uri '/service/put/myfile.xml' 
XX.XXX.XXX.XXX - - [16/May/2010:06:33:40 +0000] [www.myserver.com/sid#7f378508aa30][rid#7f3785393858/subreq] (1) pass through /service/put/myfile.xml 

다음

이 적용 후 RewriteLog 내용입니다


업데이트 2 :

아파치 설정 :

RewriteEngine on 
RewriteLog "/etc/httpd/logs/rewrite.log" 
RewriteLogLevel 9 
RewriteCond %{REQUEST_METHOD} =PUT 
RewriteRule ^/test/(.*) /$1 [PT] 
RedirectMatch 301 ^/test/(.*)$ http://www.myserver.com/$1 
AliasMatch ^/style/(.*)?$ "/var/www/test/www/style/$1" 
AliasMatch ^/js/(.*)?$ "/var/www/test/www/js/$1" 
AliasMatch ^/min/(.*)?$ "/var/www/test/www/min/$1" 
AliasMatch ^/downloads/(.*)?$ "/var/www/test/www/downloads/$1" 
AliasMatch ^/images/(.*)?$ "/var/www/test/www/images/$1" 
AliasMatch ^/chart/(.*)?$ "/var/www/test/www/graphs/$1" 
AliasMatch ^(/.*)?$ "/var/www/test/www/index.php$1" 

<Directory "/var/www/test"> 
    AllowOverride None 
    Allow from all 
</Directory> 

답변

2

mod_rewrite으로있다 :

RewriteEngine on 
RewriteCond %{REQUEST_METHOD} =PUT 
RewriteRule ^/test/(.*) /$1 
+0

의 mod_rewrite는 302 또는 301 리디렉션을 발행하지 않습니다? – benjisail

+0

아니요, 사용자에게 말하지 않거나 전체 URL을 제공하지 않는 한. – Artefacto

+0

이 mod_rewrite 규칙을 사용하면 405 HTTP 오류 상태가 다음과 같이 표시됩니다. PUT 요청을 보내려고하면 "/test/service/put/myfile.xml에 요청 된 메소드 PUT이 허용되지 않습니다." 301 HTTP 상태 대신 내 서버. 다시 쓰기가 올바르게 완료되었는지 어떻게 확인할 수 있습니까? RewriteRule 후에 AliasMatch를하고 있습니다. 재작 성하면 여전히 작동합니까? 감사합니다. – benjisail