简体   繁体   中英

HTaccess Rule To Tidy Up REST API requests

I have an API server that I am working on it currently accepts requests through $_GET variables like below

http://localhost/request.php?method=get&action=query_users&id=1138ab9bce298fe35553827792794394&time=1319225314&signature=d2325dedc41bd3bb7dc3f7c4fd6f081d95af1000

I need help creating a HTaccess rule that can read urls that replace the '&' with '/' and also the '=' and '?' with '/' to create a clean url like

http://localhost/request/method/get/action/query_users/id/1138ab9bce298fe35553827792794394/time/1319225314/signature/d2325dedc41bd3bb7dc3f7c4fd6f081d95af1000

Is there any way of doing this whilst still keeping the get parameters intact for the api to work from?

Also this is not the only request there are different requests that will be made.

Stackoverflow is always the place to go for expert advice so thanks in advance

This tends to be my standard answer to this kind of question, but why are you trying to do this with .htaccess rules when you could just do it in request.php , and that would be much more maintainable . Just parse the value of $_SERVER['REQUEST_URI'] in your php script.

//not really tested, treat as pseudocode
//doesn't remove the base url
$params = array();
$parts = explode('/', $_SERVER['REQUEST_URI']);
//skip through the segments by 2
for($i = 0; $i < count($parts); $i = $i + 2){
  //first segment is the param name, second is the value 
  $params[$parts[$i]] = $parts[$i+1];
}

//and make it work with your exsisting code
$_GET = $params;

With that in place, you should be able to request:

http://example.com/request.php/method/get/action/query_users/id/1138ab9bce298fe35553827792794394/time/1319225314/signature/d2325dedc41bd3bb7dc3f7c4fd6f081d95af1000

Or use this simple .htaccess :

RewriteRule ^request/ request.php

And request:

http://example.com/request/method/get/action/query_users/id/1138ab9bce298fe35553827792794394/time/1319225314/signature/d2325dedc41bd3bb7dc3f7c4fd6f081d95af1000

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM