nginx+php-fpm无法使用PUT和DELETE等方法

2016-6-3 20:41:26

群里讨论nginx+fastcgi和apache+mod_php时,有人提到了nginx+fcgi不支持PUT和DELETE,会报405,所以只好通过劫持405状态码的方法来处理这些方法

无标题

但是这种方法过于蛋疼,再加上我以前在写php的时候是正常使用过这些方法的,于是提出了异议并且实现了PUT方法的demo。

对比双方的fastcgi配置后,并没有发现什么区别,唯一的区别是我使用的是Tengine,而对方是nginx,而Tengine文档里并没有提到这一改动,于是只好继续测试

QQ截图20160603203050
真的出现了405,难道真的是Tengine对这方面做出了改动?

不过如果输入完整的url,事情就有了转机

QQ截图20160603202036

nginx下搭配fcgi也是可以正常使用PUT方法的,那么问题出在哪里呢

两者的差距只在是否指定index.php文件,仔细检查了一下nginx的配置文件,发现指定了

location / {
    root /usr/local/html;
    index index.html index.htm;
}

猜测是直接命中了这个location,而nginx默认是不对PUT和DELETE等DAV方法提供支持的,所以返回了405,删除这段location后就能够正常的将请求rewrite给index.php了