Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/08/2008, 20:14
Avatar de Wind
Wind
 
Fecha de Ingreso: junio-2008
Ubicación: Oficinas de Pulsem
Mensajes: 8
Antigüedad: 16 años
Puntos: 0
mod_rewrite: Redireccionar urls sin slash al final

Buenas,

Ya llevo un buen rato intentando crear una regla para redireccionar cualquier url que no contenga slash al final a su correspondiente con slash.

Tengo unas reglas muy sencillas pero aparentemente la condición no me está funcionando. He aquí mi código en el .htaccess.
Caso 1.
Código:
RewriteEngine On
RewriteBase /

RewriteCond %{SCRIPT_FILENAME} !.*index.*
RewriteRule ^([^/]+)/([^/]+)$ index.php?s=$1&slug=$2 [NC,L]
RewriteRule ^([^/]+)$ index.php?s=$1 [NC,L]

RewriteRule ^([^/]+)/([^/]+)/$ index.php?s=$1&slug=$2 [NC,L]
RewriteRule ^([^/]+)/$ index.php?s=$1 [NC,L]
Funciona de forma que cualquier url sea redirigida a un archivo central (index.php)

Esta ha sido una opción. Ya que por ahora sólo manejo 2 reglas, he colocado otras 2 reglas para manejar aquellos casos donde no tengan slash al final. Sin embargo, al redirigirme a index.php este al no tiener slash al final, provoca redundancia. Así, he colocado la condición para que se detenga cuando se trate del archivo index.php... pero no me está funcionando ya que me vuelve a redirigir (aunque lo extraño es que solo una vez) a index.php?s=index.php

Lo más cerca quye he estado de la solución ha sido con:
Caso 2.
Código:
RewriteEngine On
RewriteBase /

RewriteRule ^(.+)^/$ $1/ 
RewriteRule ^([^/]+)/([^/]+)/$ index.php?s=$1&slug=$2 [NC,L]
RewriteRule ^([^/]+)/$ index.php?s=$1 [NC,L]
Esta aparentemente debe funcionar para cualquier caso, pero solo me redirige correctamente a la url con slash para el primer nivel, es decir si escribo:

http://nwsnake.exofire.net/blog/ redirige a -> http://nwsnake.exofire.net/index.php?s=blog

http://nwsnake.exofire.net/blog redirige a -> http://nwsnake.exofire.net/blog/ redirige a -> http://nwsnake.exofire.net/index.php?s=blog

http://nwsnake.exofire.net/blog/ejemplo/ redirige a -> http://nwsnake.exofire.net/index.php?s=blog&slug=ejemplo

pero

http://nwsnake.exofire.net/blog/ejemplo redirige a -> ERROR 404


Qué error estoy cometiendo en la condición en el primer caso?? Porque no se aplica la regla en los subniveles en el segundo caso?? O mejor aún, existe alguna regla definitiva para redireccionar cualquier URL (sin importar la profundidad) sin slash a su correspondiente con slash?

Gracias por adelantado!