如何在apache php 5.0中启用PUT方法

时间:2012-01-10 18:48:37

标签: php apache .htaccess put

我在htaccess中有一个内容

Options FollowSymLinks

RewriteEngine on

# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# otherwise forward it to index.php
RewriteRule .* index.php
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]

如何添加启用PUT方法? 感谢

3 个答案:

答案 0 :(得分:2)

以下是可能适合您的解决方案

  1. 首先,一个实用程序文件支持HTTP摘要认证,其中 可以位于目标目录(或常见的PHP包含 目录,如果你可以设置一个):dowload and rename dauth.php

  2. 其次,在相关目录中,放置以下PHP脚本: download and rename put.php

  3. 第三,将以下.htaccess文件存储在目标目录中, 用域相对路径替换'/ path-to-target-directory' (例如,如果可以在http://mydomain/x/y/z.html读取目标文件, 那么/ path-to-target-directory将是'/ x / y'):download and rename .htaccess

  4. .htaccess示例:

    Options FollowSymLinks
    
    RewriteEngine on
    RewriteBase /path-to-target-directory
    RewriteCond %{REQUEST_METHOD} !PUT
    RewriteRule ^/put\.php$ - [F]
    RewriteCond %{REQUEST_METHOD} PUT
    RewriteCond %{QUERY_STRING} ^$
    RewriteRule ^/put\.php$ - [F]
    RewriteCond %{REQUEST_METHOD} PUT
    RewriteRule ^(.*)$ put.php?url=$1 [L]
    

    有关详细信息,请参阅:Here

答案 1 :(得分:0)

约定讨论传输要使用的基础方法的X-HTTP-METHOD-OVERRIDE标头(在POST请求中)。

您可以在php应用程序中获取此请求标头,以定义您是否处理PUT请求。

答案 2 :(得分:0)

使用apache“启用”PUT请求无需任何操作。

如果你的意思是你没有收到通过PUT请求发送的数据 - 你需要在你的代码中使用这样的PHP代码:

 if ($_SERVER['REQUEST_METHOD'] === 'PUT') {
     $data = file_get_contents('php://input');
 }

因为PUT请求不会填充$_POST(显然,因为它不是POST请求)。