【问题标题】:rewrite URL for PUT request重写 PUT 请求的 URL
【发布时间】:2011-02-19 18:58:41
【问题描述】:

我更改了我的 URL 在我的服务器上的工作方式。 现在是 www.myserver.com/service 而不是 www.myserver.com/test/service

我已将 RedirectMatch 301 添加到我的 Apache conf 文件中,以将对 www.myserver.com/test 的任何访问重定向到 www.myserver.com/

我通过 HTTP PUT 在这个 URL 上接收文件到这个服务器,例如: www.myserver.com/test/service/put/myfile.xml

发送文件的服务器不处理 301 HTTP 状态码,因此文件不再到达。

有没有办法在 PUT 请求时重写 URL,以免错过任何文件?

谢谢,

本杰明


更新:

这是应用后的 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>

【问题讨论】:

    标签: apache http mod-rewrite put


    【解决方案1】:

    有,mod_rewrite:

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

    【讨论】:

    • mod_rewrite 不会发出任何 302 或 301 重定向?
    • 不,除非你告诉它(或者你提供一个完整的 URL)。
    • 有了这个 mod_rewrite 规则,我得到一个 405 HTTP 错误状态,当我尝试发送一个PUT 请求到我的服务器,而不是 301 HTTP 状态。如何验证重写是否正确完成?在 RewriteRule 之后,我正在做 AliasMatch。如果重写发生,它们还能工作吗?谢谢!
    • Tru 将 PT (passthru) 标志添加到重写规则:RewriteRule ^/test/(.*) /$1 [PT]
    • 这里是 apache access_log:XX.XXX.XXX.XXX - 用户 [16/May/2010:06:12:25 +0000] "PUT /test/service/put/myfile.xml HTTP/1.1" 404 1759 "-" "-"
    猜你喜欢
    • 1970-01-01
    • 2019-05-11
    • 2021-10-31
    • 2015-03-11
    • 2014-11-19
    • 2015-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多