Foros del Web » Creando para Internet » Diseño web »

htaccess mod_rewrite urls amigables

Estas en el tema de htaccess mod_rewrite urls amigables en el foro de Diseño web en Foros del Web. Hola, soy nuevo en el foro, y no le puedo encontrar la vuelta a este problema: tengo un htaccess con el siguiente código en forma ...
  #1 (permalink)  
Antiguo 16/08/2010, 17:24
 
Fecha de Ingreso: agosto-2010
Mensajes: 3
Antigüedad: 13 años, 8 meses
Puntos: 0
htaccess mod_rewrite urls amigables

Hola, soy nuevo en el foro, y no le puedo encontrar la vuelta a este problema:

tengo un htaccess con el siguiente código en forma local en un subdirectorio:

Código:
<ifmodule mod_rewrite.c>
    RewriteEngine on
    Options +FollowSymlinks

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteRule ^(.*)/(.*)$ index.php?go=$1&p2=$2 [L,NC]    
    RewriteRule ^(.*)$ index.php?go=$1 [L,NC]

</ifmodule>
Lo que quiero lograr es que me tome 2 (o más) parámetros.
El primer parámetro ("go") es para proveer el link. y lodemás parámetros para lo que sirvan.

El problema es que si pongo la regla de los 2 parámetros (RewriteRule ^(.*)/(.*)$ index.php?go=$1&p2=$2 [L,NC] ), tengo problemas con los css.

Ya intenté la etiqueta <base href="">, y no funcionó, cambié las urls en los archivos css y en el <link> agegándole todo lo imaginable ("7", la subcarpeta, la url complete, etc ) y nada....

Le agregué luego a las reglas la subcarpeta así:

Código:
RewriteRule subcarpeta/^(.*)/(.*)$ index.php?go=$1&p2=$2 [L,NC]    
RewriteRule subcarpeta/^(.*)$ index.php?go=$1 [L,NC]
entonces no tengo problema con los css... pero ahora ya no me reconoce los parámetros, me tira error 404.

He probado de todo y muchas combinaciones, y la verdad es que ya no sé.

PD: la alternativa es tomar un sólo parámetro complejo y luego tratarlo con alguna función interna, pero preferiría hacerlo con el htaccess
.
  #2 (permalink)  
Antiguo 16/08/2010, 18:19
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: htaccess mod_rewrite urls amigables

macanudp:

Con estas reglas
RewriteEngine On
RewriteRule ^([^/]*)/([^/]*)\.html$ /index.php?go=$1&p2=$2 [L]


Esto
http://dominio.com/index.php?go=uno&p2=accion
se convertiría en
http://dominio.com/uno/accion.html

Podrías reemplazar html$ por php$ y accion.html x accion.php si fuese conveniente
No se si te sirva de ayuda

saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #3 (permalink)  
Antiguo 16/08/2010, 21:48
 
Fecha de Ingreso: agosto-2010
Mensajes: 3
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: htaccess mod_rewrite urls amigables

Cita:
Iniciado por emprear Ver Mensaje
macanudp:

Con estas reglas
RewriteEngine On
RewriteRule ^([^/]*)/([^/]*)\.html$ /index.php?go=$1&p2=$2 [L]


Esto
http://dominio.com/index.php?go=uno&p2=accion
se convertiría en
http://dominio.com/uno/accion.html

Podrías reemplazar html$ por php$ y accion.html x accion.php si fuese conveniente
No se si te sirva de ayuda

saludos
Tal vez me faltó información que incluir:
no tengo problema de funcionamiento cuando solo uso la regla de 1 parámetro,
si no cuando utilizo la de 2 (y la idea es hacer varias reglas de n parámetros, pero si no funciona de 2....)

El otro detalle es que utilizo el index como punto de antrada del sitio, o sea que todas las urls pasan por el index, son evaluadas y redireccionadas.

Lo que quiero lograr es enviar n parametros (es decir, si quiero enviar 1, envío 1 si quiero enviar 2 envío 2, etc.) en cualquier momento, siendo el primero la referencia a la página o archivo de trabajo.

He probado tu regla pero sigo con el mismo problema: si me funcionan los parámetros, se me descuajeringan los css (recordar que ya probé las soluciones "estándar"!!!!!!)
  #4 (permalink)  
Antiguo 17/08/2010, 00:35
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: htaccess mod_rewrite urls amigables

macanudp:

Parte del problema pasa porque en esto del modrewrite cuesta a veces transmitir el concepto de lo que se quiere hacer, no porque lo expliques mal, sino que habria que ver todo globalmente.
De todas maneras hice esta demo, que quizás no se aplique directamente a lo que queres hacer. Use 2 parámetros, y una hoja de estilos, la cual la toma sin problemas (uso la url relativa a la raiz del sitio /estilo.css)

http://modrewrite.emprear.com/

cree un par de links a manera de prueba, pero también se pueden pasar otros valores a través de la url

Dos consideraciones,
en .htaccess tengo directoryIndex index.php por lo que construyo a partir de /?nombre= .
Si no se pasan los dos valores vas a recibir un 404

Una cosa más, como verás hay un link a una carpeta de nombre "eduardo", no está en el código porque lo hice despues, pero dentro de eduardo cree una carpeta "naranja", si te dirijes a
http://modrewrite.emprear.com/eduardo/naranja/
vas a esa carpeta y no pasa valores a al index.php, eso es debido al uso de
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f

saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #5 (permalink)  
Antiguo 17/08/2010, 11:37
 
Fecha de Ingreso: agosto-2010
Mensajes: 3
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: htaccess mod_rewrite urls amigables

Muchísimas gracias emprear por la las respuestas y los ejemplos.

Hoy no tengo tiempo, pero luego voy a hacer lo mismo, una página de ejemplo online.

En tu ejemplo SIEMPRE pasas dos variables, y cuando es una sola es una carpeta, por lo que te redirecciona sin parámetros (es lo que me parece).

Tienes mucha razón con la dificultad de explicar lo que uno quiere hacer
Yo no tengo problema en que me reconozca 2 parametros y no me desajusten los css, siempre y cuando mande 2 parametros.

Si envío 1 sólo parámetro empiezan los problemas, teniendo en cuenta que lo que quiero lograr es que el htacces tenga una regla para cada tupla de n parámetros, y que cada regla funcione según la cantidad de parámetros eviados.
(es decir que si funciona la de 2, agregaría de 3, 4...n parámetros).


Todo esto se me ocurrio desde este [URL="http://www.maestrosdelweb.com/editorial/urlamigable/"]código que encontré en la web[/URL] (que dicho sea de paso no me funcinó mucho que digamos):


Código:
#4 variables
Rewriterule ^(.*)/(.*),(.*)/(.*),(.*)/(.*),(.*)/(.*),(.*)/$ $1.php?$2=$3&$4=$5&$6=$7&$8=$9
#3 variables
Rewriterule ^(.*)/(.*),(.*)/(.*),(.*)/(.*),(.*)/$ $1.php?$2=$3&$4=$5&$6=$7
#2 variables
Rewriterule ^(.*)/(.*),(.*)/(.*),(.*)/$ $1.php?$2=$3&$4=$5
#1 variable
Rewriterule ^(.*)/(.*),(.*)/$ $1.php?$2=$3

Etiquetas: amigables, htaccess, mod_rewrite, url
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 11:19.