2011-10-21 12 views
6

que tiene un servidor de API que estoy trabajando en él acepta actualmente solicitudes a través de $ _GET variables como la continuaciónHTAccess regla Para API pone en orden la RESTO solicita

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

Necesito ayuda para crear una regla HTAccess que puede leer las direcciones URL que reemplace el '&' con '/' y también el '=' y '?' con '/' para crear una URL limpia como

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

¿Hay alguna manera de hacer esto sin dejar de mantener los parámetros GET intacta para la API para trabajar desde?

Además, esta no es la única solicitud que se realizarán diferentes solicitudes.

Stackoverflow es siempre el lugar para ir para el asesoramiento de expertos así que gracias de antemano

+0

parece como duplicado de http://stackoverflow.com/question s/1345314/apache-mod-rewrite-replace-character-with-another, vea la segunda respuesta – Zyava

+1

A juzgar por su URI de ejemplo, parece que tiene un malentendido fundamental de las API RESTful. Una búsqueda de "transferencia de estado representativo" le proporcionará mucha más información sobre el tema. – Herbert

Respuesta

21

Esto tiende a ser mi respuesta estándar para este tipo de pregunta, pero Por qué estás tratando de hacer esto con .htaccess reglas cuando podría hacerlo en request.php, y eso sería mucho más fácil de mantener. Simplemente analice el valor de $_SERVER['REQUEST_URI'] en su script php.

//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; 

Con esto en su lugar, usted debe ser capaz de solicitud:

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

O utilizar este sencillo .htaccess:

RewriteRule ^request/ request.php 

y Solicitud:

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

Gracias! funcionó bien – user866190

+1

He estado buscando siempre una buena solución '.htaccess' y nunca pensé en explotar el' REQUEST_URI' en su lugar ... Tienes razón, mucho más mantenible, gracias! –

+0

increíble solución :-) –

Cuestiones relacionadas