我在PHP中编写RESTful应用程序并启用了对nginx的DELETE,PUT请求。
location / {
root html;
index index.php index.html index.htm;
dav_methods PUT DELETE;
}
当我用方法DELETE执行REST请求时,我想在index.php中处理 - nginx删除了html文件夹。
告诉nginx将DELETE请求传递给index.php的正确方法是什么?
答案 0 :(得分:2)
NginX直接执行那些HTTP方法(DELETE,PUT),甚至没有调用PHP引擎,因为它们是由nginX中的DAV扩展处理的。 要解决此问题,您可以对所有API调用使用POST HTTP方法,但添加其他自定义标头以指示实际的REST方法 - 而不是此
PUT /api/Person/4 HTTP/1.1
Host: localhost:10320
Content-Type: application/json
Cache-Control: no-cache
您将调用此
POST /api/Person/4 HTTP/1.1
Host: localhost:10320
Content-Type: application/json
X-REST-Method: PUT
Cache-Control: no-cache
然后在PHP中你将以这种方式检查
if($_SERVER['HTTP_X_REST_METHOD']!='')
switch($_SERVER['HTTP_X_REST_METHOD'])
{
case 'PUT':
...
break;
case 'PATCH':
...
break;
case 'DELETE':
...
break;
}
答案 1 :(得分:1)
Nginx不会禁用PUT或DELETE请求,但它不允许对文件夹索引发出这些请求。实际上并不需要使用nginx启用任何东西(您应该删除dav_methods行),但是您需要避免通过索引指令访问index.php,如:
index index.php index.html index.htm;
而是使用try_files来匹配index.php文件,例如:
try_files $uri /index.php$is_args$args;
在这种情况下,nginx不会抱怨您的DELETE方法。