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>
的mod_rewrite不会发出任何302或301重定向? – benjisail 2010-05-15 03:13:37
不,除非你告诉它(或者你提供一个完整的URL)。 – Artefacto 2010-05-15 03:16:05
使用这个mod_rewrite规则,我得到一个405 HTTP错误状态说: “请求的方法PUT不允许用于URL /test/service/put/myfile.xml” 当我尝试发送一个PUT请求到我的服务器而不是301 HTTP状态。 如何验证重写是否正确完成? RewriteRule后,我正在做AliasMatch。如果重写发生,他们还会继续工作吗? 谢谢! – benjisail 2010-05-15 21:44:25