nginx使用put,delete请求方式时, 报HTTP 405 Method Not Allowed错误

nginx 使用 put, delete请求方式时, 报HTTP 405 Method Not Allowed错误. 但是如果在URL中加上index.php, 就可以正常工作

大概情况是这样:
同样用PUT请求下面两个URL, 一个会报405错误, 一个正常返回
http://xxx.com/api/xyz nginx会报405错误 (405错误是nginx报的, 跟PHP框架没关系)
http://xxx.com/index.php/api/xyz 接口正常工作

这是什么原因, 怎么实现第一种URL也能正常工作?
之前在google搜这个问题, 有提到在编译时要加上 dav_module, 才能使用put, delete请求方式, 但是加上index.php后put,delete请求又能正常工作.
目前服务器上的nginx确实没有装这个模块, 是因为这个模块的原因吗

阅读 10.2k
2 个回答
  1. 与 ngx_http_dav_module 配置与否无关,主要是由于访问本地文件(ngx_http_static_module) 有关。

解决方法:
可以通过 rewrite 规则,把 http://xxx.com/api/xyz 的访问 内部 rewrite 成 http://xxx.com/index.php/api/xyz

rewrite ^/api/(.*)$ /index.php/api/$1;

php的话nginx是把请求交给php处理了,所以不报错。不带index.php的地址,你是用try_files还是rewrite来实现的?试试另外的方法吧。

另外,还可以查到一种方法是添加一项设置,你也可以试试。

error_page 405 =200 $uri;
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题