переписать мод: Как перенаправить 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 - это УДАЛИТЬ. Похоже, это не работает...
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-адрес и не касается тела.
Доступна директива 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
# ...