Nginx web-dav 409 Conflict CRUD php API

laz*_*mit 1 php crud nginx

尝试将代理HTTP CRUD请求的nginx配置为fastcgi

nginx配置:

server {
    listen   80;
    server_name api.example.dev;

    dav_methods  PUT DELETE;

    dav_access group:rw all:r;
    create_full_put_path on;

    index index_dev.php;
    set $root_path '/var/www/api/public';
    root $root_path;
    try_files $uri $uri/ @rewrite;

    location @rewrite {
        rewrite ^/(.*)$ /index_dev.php?_url=/$1;
    }

    location ~ \.php {
        fastcgi_pass unix:/var/run/php-fpm.api.sock;
        fastcgi_index /index_dev.php;
        include /etc/nginx/fastcgi_params;
        fastcgi_split_path_info       ^(.+\.php)(/.+)$;
        fastcgi_param PATH_INFO       $fastcgi_path_info;
        fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param HOST $host;
        fastcgi_param DESTINATION $http_destination;
        fastcgi_param OVERWRITE $http_overwrite;
        fastcgi_param APPLICATION_ENV dev;
    }
}
Run Code Online (Sandbox Code Playgroud)

在PHP方面,我有phalcon php-framework.Witch可以很好地处理简单的GET/POST请求.框架中的路由器可以处理PUT,DELETE方法.但是当我尝试制作简单的PUT方法时,请求nginx返回409上面的配置冲突错误.

我找不到任何关于该案例的建议以及如何从nginx将web_dav方法传递给php.

谢谢.

Cra*_*yro 5

这个答案是在普通的nginx WebDav的上下文中,但也可能对你的PHP情况有用.我发现,如果您尝试指定目标父文件夹而不是包含文件名的完整目标,您将获得409.例:

建立:

$ echo "test" >> ~/test.txt
$ cat ~/test.txt
test
Run Code Online (Sandbox Code Playgroud)

测试不好:

$ curl -X PUT -d `cat ~/test.txt` http://localhost:8080/
<html>
<head><title>409 Conflict</title></head>
<body bgcolor="white">
<center><h1>409 Conflict</h1></center>
<hr><center>nginx/1.5.0</center>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

好测试:

$ curl -X PUT -d `cat ~/test.txt` http://localhost:8080/test.txt
$ curl -X GET http://localhost:8080/test.txt
test
$
Run Code Online (Sandbox Code Playgroud)