Мы создали плагин на основе PHP, который предоставляет интерфейс RESTful, который используется мобильным приложением, над которым мы работаем. Плагин является самостоятельным, то есть любой, кто хочет использовать мобильное приложение, должен установить этот плагин PHP на свой сервер. Один из наших пользователей сообщает, что после установки плагина они не могут войти в систему. Используя Postman для реализации API-интерфейсов, участвующих в запросе на вход, я пришел к следующему:
ЗАПРОС
PUT http://<user's website>/index.php/wurrd/clientinterface/operator/login {"username":"apple", "password":"dove", "clientid":"AABBB-CCCCC-DEFGHIJ", "deviceuuid":"aaa-uuu-isdi"}
ОТВЕТ
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html> <head> <title>501 Method Not Implemented</title> </head> <body> <h1>Method Not Implemented</h1> <p>GET to /chat/index.php/wurrd/clientinterface/operator/login not supported. <br /> </p> <p>Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.</p> </body> </html>
API не раскрывает этот маршрут для GET, поэтому сообщение об ошибке подходит, когда вы пытаетесь попасть туда через GET. Однако проблема заключается в том, что запрос был выполнен с помощью PUT.
Я не понимаю, как расследовать этот вопрос. На сервере работает Apache. Это может быть проблема с .htaccess? Я думал, что это проблема mod_rewrite, но я думаю, что это должно касаться URL-адреса, а не метода HTTP.
Кроме того, маршрутизация выполняется с использованием компонента маршрутизации Symfony2.
Любая помощь будет оценена по достоинству.
Благодарю.
Обновление 1:
Это конфигурация маршрута Symfony:
wurrd_client_operator_login: # The login request details are passed in as a JSON payload. path: /wurrd/clientinterface/operator/login defaults: _controller: Wurrd\Mibew\Plugin\ClientInterface\Controller\OperatorController::loginAction methods: [PUT]
поwurrd_client_operator_login: # The login request details are passed in as a JSON payload. path: /wurrd/clientinterface/operator/login defaults: _controller: Wurrd\Mibew\Plugin\ClientInterface\Controller\OperatorController::loginAction methods: [PUT]
Попробуйте добавить параметр _method к URL-адресу, чтобы заставить метод.
Подробнее здесь: http://symfony.com/doc/current/cookbook/routing/method_parameters.html
Это также может произойти, если происходит ненаправленное перенаправление 303 (а также 301/302, если ваш клиент не реализует HTTP должным образом), или если прокси-сервер / человек-в-середине преобразует запрос, прежде чем он достигнет сервер.
Чтобы использовать _method
, убедитесь, что ничто не отключает поддержку: http://symfony.com/doc/current/reference/configuration/framework.html#http-method-override