2010-07-23 28 views
8

¿Qué hay de malo con esta regla de reescritura?RewriteRule que conserva los parámetros GET

RewriteRule ^api/(.+)$ api/index.php?url=$1 [L] 

Simplemente quiero "index.php? Url =" que se añade después de API/y antes de que el resto de los parámetros GET.

api/image/upload&arg1=1&text=lorem+ipsum 

a

api/index.php?url=image/upload&arg1=1&text=lorem+ipsum 

¿Qué hay de malo en (. +) Para obtener todo tras API /?

+0

^api/([a-zA-Z0-9/_ \ & \ = \%] +) $ funciona pero no funciona con diferentes caracteres específicos de idioma como åäöææ y así sucesivamente ... Es por eso que lo haría como^api /(.+)$ para trabajar en su lugar. . debe significar cualquier carácter, excepto el salto de línea o el final de la cadena, así que no entiendo por qué no funciona. – Tirithen

+0

posible duplicado de [mantener parámetros de URL con reescritura .htaccess] (http://stackoverflow.com/questions/4071155/keep-url-parameters-with-htaccess-rewrite) –

Respuesta

19

la expresión regular en la RewriteRule solamente se ejecuta en la parte de la ruta de la URL, no los parámetros de consulta. Afortunadamente existe el [QSA] flag para preservar los parámetros de consulta existentes.

+0

¡Maravilloso! ¡Esto resolvió mis problemas! También he encontrado una función JS para codificar URL todo no a-zA-Z0-9_. personajes http://cass-hacks.com/articles/code/js_url_encode_decode/ – Tirithen

+0

¡Muchas gracias! –

+0

¡QSA me salvó! ¡Gracias Señor! –

0

¿Estás haciendo algo para detener la recursión infinita?

RewriteRule ^api/(.+)$ api/index.php?url=$1 [R=301,L] 

o algún equivalente

+0

tuve [L] antes, pero no hace ninguna diffrence Mi problema es que apache2 informa que el único parámetro get es [url] => index.php, todos los demás parámetros desaparecieron y el parámetro url debería ser 'image/upload'. Cuando uso la regla^api/([a-zA-Z0-9/_] +) $, en cambio, el parámetro url es 'imagen/carga', pero pierdo todos los demás parámetros GET. – Tirithen

+0

estoy allso no tratar de hacer una redirección, acaba de obtener el texto entre api/y antes de la primera y para obtener la cadena de prefijo "index.php? Url =" y el resto de los parámetros GET conservado – Tirithen

+0

¿Cómo ' R = 301' ¿trabajas aquí? No es en la documentación en http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html –

0

creo que se debe escribir su nombre de dominio antes de que el material de expresiones regulares. De esta manera:

RewriteRule ^(.+).com/api/(.*)$ "$1.com/api/index.php?url=$2" [R=301,L] 
Cuestiones relacionadas