mod_rewrite:如何重定向HTTP DELETE和PUT
我试图通过使用mod_rewrite在php中写一点休息api。我的问题是: 如何处理HTTP DELETE和PUT? 例如,url将是: /book/1234mod_rewrite:如何重定向HTTP DELETE和PUT
其中1234是书的唯一ID。我想将这个id(1234)“重定向到”book.php,并将id作为参数。我已经知道如何在php脚本中读取PUT和DELETE变量,但是如何在mod_rewrite中设置此重写规则?
任何想法?
编辑: 一个GET重写规则是这样的:
RewriteRule book/([0-9]+) book.php?id=$1 [QSA]
我怎么做这个“参数转发”为PUT和DELETE?据我所知,HTTP POST,PUT和DELETE使用HTTP请求体传输参数值。所以我想我需要在HTTP请求正文中追加参数。但我不知道如何用mod_rewrite来做到这一点。
我可以做一些混合DELETE和GET?
RewriteCond %{REQUEST_METHOD} =DELETE
RewriteRule book/([0-9]+) book.php?id=$1 [QSA]
然后在book.php中我将用户$ _GET [“身份证”]检索书籍ID,即使HTTP头说,HTTP方法是删除。它似乎没有工作...
我可以做一些混合删除和获取的:如果你想通过HTTP请求mthod重写这样使用它?
是的。在重写规则中,您根本不必担心请求方法或PUT正文。
对于你的榜样,这意味着:
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
只有更改网址并且不会触及正文。
非常感谢! – sockeqwe 2013-02-13 13:19:23
有一个RewriteCond
指令可用。您可以使用它来指定以下规则在特定条件下才有效。
RewriteCond %{REQUEST_METHOD} =PUT
RewriteRule ^something\/([0-9]+)$ put.php?id=$1
RewriteCond %{REQUEST_METHOD} =DELETE
RewriteRule ^something\/([0-9]+)$ delete.php?id=$1
# ...
上使用'Script PUT ...'或RewriteCond,但是我怎么把这个id作为PUT参数传递给php脚本:/ something/1234比我想要的东西.php可以检索ID =“123”莫名其妙。对于HTTP GET,我会这样做:RewriteRule something /([0-9] +)something.php?id = $ 1 [QSA]。如何为PUT和DELETE执行此参数转发?据我所知,我需要在HTTP请求正文中附加一个var。但我不知道如何做到这一点与mod_rewrite – sockeqwe 2013-02-13 10:00:10
像任何其他重写规则 - >使用正则表达式。你可以按照大量的教程。或者查看我的更新 – hek2mgl 2013-02-13 11:59:10
非常感谢! – sockeqwe 2013-02-13 13:18:57
你可以在'%{REQUEST_METHOD}' – mario 2013-02-12 21:45:02