2010-05-15 86 views
1

我改變了我的URL在我的服務器上工作的方式。 這是現在www.myserver.com/service代替www.myserver.com/test/service重寫PUT請求的URL

我添加了一個RedirectMatch 301到我的Apache的conf文件到www.myserver.com/test任何訪問重定向到www.myserver.com/

我在此URL通過HTTP PUT接收文件到該服務器,例如: www.myserver.com/test/service/put/myfile.xml

服務器發送文件不處理301 HTTP狀態代碼,以便這些文件並沒有到達了。

有沒有一種方法來重寫URL時,它是一個PUT請求,以便不會錯過任何文件?

感謝,

本傑明


UPDATE:

這裏是應用此之後RewriteLog內容:

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 

更新2:

Apache配置:

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 2010-05-15 03:13:37

+0

不,除非你告訴它(或者你提供一個完整的URL)。 – Artefacto 2010-05-15 03:16:05

+0

使用這個mod_rewrite規則,我得到一個405 HTTP錯誤狀態說: 「請求的方法PUT不允許用於URL /test/service/put/myfile.xml」 當我嘗試發送一個PUT請求到我的服務器而不是301 HTTP狀態。 如何驗證重寫是否正確完成? RewriteRule後,我正在做AliasMatch。如果重寫發生,他們還會繼續工作嗎? 謝謝! – benjisail 2010-05-15 21:44:25