Использование RewriteRule в .htaccess для запроса POST - PullRequest
0 голосов
/ 14 января 2010

Я пытаюсь заблокировать страницу, чтобы принимать только запросы POST. как часть RESTful API. У меня есть следующее, но это не похоже на работу. Любая помощь будет оценена.

RewriteCond %{REQUEST_METHOD} POST
RewriteRule ^api/(call1|call2|call3)/?/ http://www.example.com/api/rest_services.php?_call=$1 [L]

Ответы [ 4 ]

8 голосов
/ 15 января 2010

Вам нужно инвертировать условие, чтобы просто соответствовать запросам, которые не являются POST:

RewriteCond %{REQUEST_METHOD} !=POST
RewriteRule ^api/(call1|call2|call3)/?/ - [L,R=405]

И затем вы также должны отправить код состояния 405 , чтобы сообщить клиенту причину. Но флаг R=405 доступен только начиная с Apache 2. Для Apache 1 вы можете отправлять эти запросы в сценарий PHP, который отвечает этим кодом состояния.

2 голосов
/ 14 января 2010

Я не квалифицирован, чтобы ответить на вопрос о .htaccess, но я все равно предпочел бы это сделать:

<?php

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    die('some meaningful REST style error here');
}
1 голос
/ 15 января 2010

Моя ошибка. Синтаксическая ошибка в RewriteRule. Должно быть следующее. Обратите внимание на $ не /

RewriteRule ^api/(call1|call2|call3)/?$ http://www.example.com/api/rest_services.php?_call=$1 [L]
0 голосов
/ 15 января 2010

Используйте это вместе с <Location>:

<Limit GET>
  Deny from all
</Limit>
...