Foros del Web » Administración de Sistemas » Apache »

Es posible hacer esto en .htacces

Estas en el tema de Es posible hacer esto en .htacces en el foro de Apache en Foros del Web. Hola a todos, soy muy novato en este tema y estaba enredando con ello. Es posible de una url así: Código: dominio.com/productos.php?lang=es otener esto: Código: ...
  #1 (permalink)  
Antiguo 09/03/2011, 06:51
 
Fecha de Ingreso: marzo-2011
Mensajes: 4
Antigüedad: 13 años, 8 meses
Puntos: 0
Pregunta Es posible hacer esto en .htacces

Hola a todos, soy muy novato en este tema y estaba enredando con ello. Es posible de una url así:
Código:
dominio.com/productos.php?lang=es
otener esto:
Código:
dominio.com/es/productos/
muchas gracias por anticipado!
  #2 (permalink)  
Antiguo 09/03/2011, 20:45
 
Fecha de Ingreso: diciembre-2009
Ubicación: dirname(__FILE__)
Mensajes: 149
Antigüedad: 14 años, 11 meses
Puntos: 11
Respuesta: Es posible hacer esto en .htacces

Prueba con:

Código Apache:
Ver original
  1. RewriteRule ^([^/]+)/(.+)$ $2.php?lang=$1

donde:
([^/]+) cualquier carácter que no es es la barra /
(.+) cualquier carácter

$2 es lo que se capturó en (.+), es decir, es segundo paréntesis.
$1 es lo que se capturó en ([^/]+) es decir, el primer paréntesis.

En resumen, dada una uri de ésta forma:

www.dominio.tld/lengua/categoria

se transformaría (de forma interna e invisible al usuario) en:

www.dominio.tld/categoria.php?lang=lengua.

Prueba y nos cuentas, toma en cuenta que muy posiblemente no todas tus uris siguen esa forma, por lo que tienes que hacer un esquema de como funcionan todas ellas y luego hacer reglas para que funcione para todo tu sitio.

Para mayor información.

Saludos.
__________________
Estreno blog ~ DesarrolladorWeb.cl :)
  #3 (permalink)  
Antiguo 10/03/2011, 01:41
 
Fecha de Ingreso: marzo-2011
Mensajes: 4
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Es posible hacer esto en .htacces

Cita:
Iniciado por RodrigoG Ver Mensaje
Prueba con:

Código Apache:
Ver original
  1. RewriteRule ^([^/]+)/(.+)$ $2.php?lang=$1

donde:
([^/]+) cualquier carácter que no es es la barra /
(.+) cualquier carácter

$2 es lo que se capturó en (.+), es decir, es segundo paréntesis.
$1 es lo que se capturó en ([^/]+) es decir, el primer paréntesis.

En resumen, dada una uri de ésta forma:

[url]www.dominio.tld/lengua/categoria[/url]

se transformaría (de forma interna e invisible al usuario) en:

[url]www.dominio.tld/categoria.php?lang=lengua[/url].

Prueba y nos cuentas, toma en cuenta que muy posiblemente no todas tus uris siguen esa forma, por lo que tienes que hacer un esquema de como funcionan todas ellas y luego hacer reglas para que funcione para todo tu sitio.

Para mayor [URL="http://httpd.apache.org/docs/current/mod/mod_rewrite.html"]información[/URL].

Saludos.
Perfecto!!! Muchas gracias!!
Investigare sobre el tema que tiene su miga. mil gracias
  #4 (permalink)  
Antiguo 10/03/2011, 03:48
 
Fecha de Ingreso: marzo-2011
Mensajes: 4
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Es posible hacer esto en .htacces

Esto del apache es duro... bufff
Ahora tengo una duda más, he cambiado la estructura en la que cargo las páginas de modo que me resulte más facil aplicar las reglas:

Código:
http://dominio.com/index.php?lang=es&sec=products&id=prod1
Ahora es más sencillo simplemente tengo que quitar los parametros y añadir los slashes, algo así:

Código:
RewriteRule ^([^/]*)/([^/]*)/([^/]*)\.html$ /?lang=$1&sec=$2&id=$3 [L]

con resultado:

http://dominio.com/es/products/prod1.html
Perfeco!... pero... y si no necesito todos los parametros para cargar la página, por ejemplo, quiero que esta misma regla me sirva para llegar a estas páginas:

Código:
http://dominio.com/index.php?lang=es&sec=products
http://dominio.com/es/products

o

http://dominio.com/index.php?lang=es
http://dominio.com/es
Vamos que no se como hacer que reescriba los parametros opcionales.

Editado:

Ya lo solucioné, no sé si será la mejor forma:
Código:
RewriteRule ^([^/]*)/$ /?lang=$1 [NC,L]
RewriteRule ^([^/]*)/([^/]*)/$ /?lang=$1&sec=$2 [NC,L]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)\.html$ /?lang=$1&sec=$2&id=$3 [NC,L]

Última edición por kojikabuto; 10/03/2011 a las 05:06
  #5 (permalink)  
Antiguo 10/03/2011, 05:31
 
Fecha de Ingreso: marzo-2011
Mensajes: 4
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Es posible hacer esto en .htacces

Ahora se me presenta una duda generalíiiiiisima. Los enlaces en código "href" que sería lo optimo, escribirlos con las urls reescritas, o hay alguna forma más comodo (como una función php que te los reescriba)
  #6 (permalink)  
Antiguo 10/03/2011, 22:44
 
Fecha de Ingreso: diciembre-2009
Ubicación: dirname(__FILE__)
Mensajes: 149
Antigüedad: 14 años, 11 meses
Puntos: 11
Respuesta: Es posible hacer esto en .htacces

hola, con RewriteCond puedes decirle a Apache que tus reglas sólo funcionen si no son rutas a archivos o directorios, etc.

Nunca lo he usado, pero generalmente veo que se usa lo siguiente:

Código APACHE:
Ver original
  1. RewriteCond %{REQUEST_URI} !-f
  2. RewriteCond %{REQUEST_URI} !-d

%{REQUEST_URI} es la petición de la url, el ! indica "no", "-f" es archivo y "-d" es directorio, en español sería algo como lo siguiente:

"Si es que la petición NO es un archivo válido alojado en el servidor Y NO es un directorio, interpretar las reglas que siguen".

Por descarte, si la petición si es de un archivo no se ejecutan tus reglas y se muestra el archivo como si no existiera tu .htaccess

Prueba y nos cuentas.
__________________
Estreno blog ~ DesarrolladorWeb.cl :)

Etiquetas: posible, htaccess
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 09:52.