переписать мод: Как перенаправить HTTP, УДАЛИТЬ и ПОМЕСТИТЬ


Я пытаюсь написать небольшой rest api на php с помощью mod_rewrite.

Мой вопрос таков: Как мне обрабатывать HTTP-УДАЛЕНИЕ и ВСТАВКУ? Например, URL-адрес будет: /книга/1234

Где 1234 - уникальный идентификатор книги. Я хочу "перенаправить" этот идентификатор (1234) на book.php с идентификатором в качестве параметра. Я уже знаю, как читать переменные PUT и DELETE в php-скрипте, но как мне установить эти правила перезаписи в mod_rewrite?

Есть идеи?

Редактировать: Правило перезаписи для GET будет выглядеть так:

RewriteRule book/([0-9]+) book.php?id=$1 [QSA] 

Как мне выполнить эту "пересылку параметров" для ВВОДА и УДАЛЕНИЯ? Насколько я знаю, HTTP POST, PUT и DELETE используют тело HTTP-запроса для передачи значений параметров. Поэтому, я думаю, мне нужно добавить параметр в тело HTTP-запроса. Но я понятия не имею, как это сделать с помощью mod_rewrite.

Могу ли я сделать какое-то смешивание УДАЛЕНИЯ и ПОЛУЧЕНИЯ?

RewriteCond %{REQUEST_METHOD} =DELETE
RewriteRule book/([0-9]+) book.php?id=$1 [QSA] 

Затем в book.php Я бы использовал $_GET['id'], чтобы получить идентификатор книги, даже если в ЗАГОЛОВКЕ HTTP указано что МЕТОД HTTP - это УДАЛИТЬ. Похоже, это не работает...

Author: sockeqwe, 2013-02-13

2 answers

Могу ли я сделать какое-то смешивание УДАЛЕНИЯ и ПОЛУЧЕНИЯ?

Да. Вам вообще не нужно беспокоиться о методе запроса или теле ВВОДА в ваших правилах перезаписи.

Для вашего примера это означает:

Mod_rewrite (Переписать)

RewriteRule book/([0-9]+) book.php?id=$1 [QSA]

HTTP-запрос

PUT /book/1234
=> PUT /book.php?id=1234

PHP-скрипт

$id = intval($_GET['id']);
if ($_SERVER['REQUEST_METHOD'] === 'PUT') {
    // yes, it is. go on as usual
}

Для дальнейшего разъяснения: Разница между параметрами GET и параметрами PUT/POST/DELETE заключается в том, что первые являются частью URL-адреса, последняя часть тела запроса. mod_rewrite только изменяет URL-адрес и не касается тела.

 3
Author: Fabian Schmengler, 2013-02-13 12:21:01

Доступна директива RewriteCond. Вы можете использовать его, чтобы указать, что следующие правила действительны только при определенных условиях. Используйте его так, если вы хотите переписать по HTTP-запросу mthod:

RewriteCond %{REQUEST_METHOD} =PUT
RewriteRule ^something\/([0-9]+)$ put.php?id=$1

RewriteCond %{REQUEST_METHOD} =DELETE
RewriteRule ^something\/([0-9]+)$ delete.php?id=$1

# ...
 5
Author: hek2mgl, 2013-02-13 11:58:34