Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] RegExp en .htaccess para sacar la última barra

Estas en el tema de RegExp en .htaccess para sacar la última barra en el foro de PHP en Foros del Web. Hola amigos. Tengo un .htaccess preparado para unas URL amigables con un controlador de MVC propio. El controlador funciona perfectamente pero tengo una duda. Mi ...
  #1 (permalink)  
Antiguo 08/09/2014, 09:43
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 10 meses
Puntos: 29
Pregunta RegExp en .htaccess para sacar la última barra

Hola amigos. Tengo un .htaccess preparado para unas URL amigables con un controlador de MVC propio. El controlador funciona perfectamente pero tengo una duda.
Mi código de .htaccess es el siguiente:

Código Apache:
Ver original
  1. Options  +FollowSymLinks -Multiviews
  2. RewriteEngine On
  3. RewriteBase /
  4. RewriteRule ^css/(.+)$ css/$1 [L]
  5. RewriteRule ^js/(.+)$ js/$1 [L]
  6. RewriteRule ^([a-z0-9]+)/([a-z0-9]+)/([0-9]+)/(.+)/(.+)$ $1.php?action=$2&title=$4&id=$3&options=$5 [L]
  7. RewriteRule ^([a-z0-9]+)/([a-z0-9]+)/([0-9]+)/(.+)$ $1.php?action=$2&title=$4&id=$3 [L]
  8. RewriteRule ^([a-z0-9]+)/([a-z0-9]+)/(.+)$ $1.php?action=$2&title=$3 [L]
  9. RewriteRule ^([a-z0-9]+)/(.+)$ $1.php?action=$2 [L]
  10. RewriteRule ^([a-z0-9]+) $1.php [L]

Con este código consigo urls como esta:

Código:
/clientes/registro => clientes.php?action=registro
/clientes/panel/2/accion-primera => clientes.php?action=panel&title=accion-primera&id=2
Pero tengo un problema. Si el usuario accede con la última barra puesta, el controlador no funciona, pues estaría llamando así:

Código:
/clientes/registro/ => clientes.php?action=registro/
Me gustaría evitar el control por PHP, con un substr() por ejemplo, porque quiero que la propia expresión regular me quite esa última barra que entorpece el controlador de URL, y hacerlo de forma limpia.

¿Alguien conoce cómo poner en la expresión regular una negación de barra final?

Gracias y un saludo amigos.
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #2 (permalink)  
Antiguo 08/09/2014, 12:10
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 7 meses
Puntos: 320
Respuesta: RegExp en .htaccess para sacar la última barra

Código Apache:
Ver original
  1. RewriteRule ^([a-z0-9]+)/(.+)([/]*)$ $1.php?action=$2 [L]
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #3 (permalink)  
Antiguo 08/09/2014, 12:13
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 10 meses
Puntos: 29
Respuesta: RegExp en .htaccess para sacar la última barra

Gracias NSD pero siento decirte que no funciona. Sigue pasando la última barra por parámetro.
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #4 (permalink)  
Antiguo 22/09/2014, 11:02
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 10 meses
Puntos: 29
Respuesta: RegExp en .htaccess para sacar la última barra

Rescato este tema para ver si alguien conoce la solución. La que probé con la respuesta de NSD no me funcionó.

Agradezco cualquier pista.

Saludos.
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #5 (permalink)  
Antiguo 22/09/2014, 12:45
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 7 meses
Puntos: 320
Respuesta: RegExp en .htaccess para sacar la última barra

Código Apache:
Ver original
  1. RewriteRule ^([a-z0-9]+)/([A-Za-z0-9_-]+)([/]*)$ $1.php?action=$2 [L]
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #6 (permalink)  
Antiguo 22/09/2014, 13:21
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 10 meses
Puntos: 29
Respuesta: RegExp en .htaccess para sacar la última barra

El mismo resultado. De hecho esta es la línea en htaccess:

Código Apache:
Ver original
  1. RewriteRule ^([a-z0-9]+)/([a-z0-9]+)/([0-9]+)/(.+)/(.+)([/]*)$ $1.php?action=$2&title=$4&id=$3&options=$5 [L]

Y si hago un var_dump de la variable GET "title":
Código HTML:
Ver original
  1. La URL utilizada:
  2. http://localhost/XXX/empresas/panel/11/configuracion/
Código PHP:
Ver original
  1. var_dump($this->get->title);
  2. // string(14) "configuracion/" » KO
Si quito la última barra, todo va perfecto.
Código HTML:
Ver original
  1. La URL utilizada:
  2. http://localhost/XXX/empresas/panel/11/configuracion
Código PHP:
Ver original
  1. var_dump($this->get->title);
  2. // string(13) "configuracion" » OK

He probado a escapar la barra en el trozo que me dijiste de esta forma:

Código Apache:
Ver original
  1. RewriteRule ^([a-z0-9]+)/([a-z0-9]+)/([0-9]+)/(.+)/(.+)([\/]*)$ $1.php?action=$2&title=$4&id=$3&options=$5 [L]

Pero tampoco funciona.
La verdad es que no sé qué hacer, y quitarle la barra al final de la URL mediante PHP me parece una patraña.

¿Es posible hacer que esa barra nunca pase como parámetro o estoy pidiendo algo imposible?

Saludos y gracias por tu ayuda.
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #7 (permalink)  
Antiguo 22/09/2014, 16:26
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 7 meses
Puntos: 320
Respuesta: RegExp en .htaccess para sacar la última barra

Hola, fijate en la diferencia del ultimo ejemplo que propuse:
Código Apache:
Ver original
  1. RewriteRule ... /([A-Za-z0-9_-]+)([/]*)$ ...

El usar:
Código Apache:
Ver original
  1. RewriteRule ... /(.+)([/]*)$ ...
como fue el primer ejemplo, no funciona porque el caracter "." incluye a la "/" del final, en cambio poniendo: ([A-Za-z0-9_-]+) en vez de (.+) la "/" no esta incluida en el primer grupo, por lo que forzadamente ira a parar al nuevo bloque.

Lo acabo de probar y funciona correctamente, si te sigue sin andar, posteo los dos archivos de prueba que tengo para que compares
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #8 (permalink)  
Antiguo 24/09/2014, 04:46
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 10 meses
Puntos: 29
Respuesta: RegExp en .htaccess para sacar la última barra

Ok, disculpa la torpeza que he tenido al no darme cuenta. Voy a probarlo y te cuento ya mismo.
Gracias!
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #9 (permalink)  
Antiguo 24/09/2014, 04:49
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 10 meses
Puntos: 29
Respuesta: RegExp en .htaccess para sacar la última barra

Eres un genio NSD :D
He puesto lo siguiente:
Código Apache:
Ver original
  1. RewriteRule ^([a-z0-9]+)/([a-z0-9]+)/([0-9]+)/(.+)/([A-Za-z0-9_-]+)([/]*)$ $1.php?action=$2&title=$4&id=$3&options=$5 [L]
  2.  # resultado
  3. http://localhost/XXX/empresas/panel/11/configuracion OK
  4. http://localhost/XXX/empresas/panel/11/configuracion/ OK

Y funciona a la perfección. Sigo teniendo un (.+) en el medio, pero no me afecta porque siempre habrá un elemento más después. La última barra parece que está metida en un patrón que no pasamos por parámetro, así que es perfecto. Lo separa correctamente.

Marco como solucionado, y mil gracias.
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.

Etiquetas: apache, friendly, htaccess, url-amigables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:00.