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

problema con htaccess

Estas en el tema de problema con htaccess en el foro de Apache en Foros del Web. Hola buenas noches, estoy creando url amigables y tengo un caso en que el archivo php se llama igual que la url amigable, lo cual ...
  #1 (permalink)  
Antiguo 28/02/2012, 14:21
 
Fecha de Ingreso: marzo-2006
Mensajes: 75
Antigüedad: 18 años, 8 meses
Puntos: 1
Información problema con htaccess

Hola buenas noches, estoy creando url amigables y tengo un caso en que el archivo php se llama igual que la url amigable, lo cual provoca que los otros dos idiomas no los tiene en cuenta y solo me carga, en este caso, el ingles; aquí va el ejemplo:

RewriteRule contactar contact.php?lang=es
RewriteRule contact contact.php?lang=en
RewriteRule 联系 contact.php?lang=ch

En la 2 línea contact y contac.php me crean el error que comento arriba, si yo pongo contactar en la url o 联系, pasa de mí y me sigue cargando el inglés.

¿sabéis porque pasa y como solucionarlo?

También tenía otra pregunta. ¿hay una forma mas flexible de ir cargando las url dependiendo del idioma? Porque hasta ahora tengo esto:

RewriteRule trabajos home.php?lang=es
RewriteRule portfolio home.php?lang=en
RewriteRule 影集 home.php?lang=ch

RewriteRule quienes-somos quienes.php?lang=es
RewriteRule about-us quienes.php?lang=en
RewriteRule 关于我们 quienes.php?lang=ch

RewriteRule contactar contact.php?lang=es
RewriteRule contact-us contact.php?lang=en
RewriteRule 联系 contact.php?lang=ch

Pero no veo que sea muy práctico, que cada vez que creo una página tenga que manipular el htacces.

Muchisimas gracias!

Saludos
  #2 (permalink)  
Antiguo 28/02/2012, 16:17
Avatar de charlyalegret  
Fecha de Ingreso: septiembre-2011
Ubicación: Barcelona
Mensajes: 705
Antigüedad: 13 años, 1 mes
Puntos: 140
Respuesta: problema con htaccess

Hola!
Y si finalizas las reglas? con esas reglas, cuando escribes "contactar" también cumplirá la segunda regla a no ser que le digas que la regla acaba en "contact": usa $ para finalizar la regla, o [L] para que no continue:

RewriteRule ^contactar$ contact.php?lang=es [L]
RewriteRule ^contact$ contact.php?lang=en [L]
RewriteRule ^联系$ contact.php?lang=ch [L]

Sobre lo segundo... lo más habitual sería trabajar de forma dinámica, y distinguir los idiomas en directorios o subdominios, para facilitar las cosas.. Un ejemplo:

Si tienes la web dividida en directorios según idioma, y usas un archivo php "padre", digamos el index.php, puedes hacer:

RewriteRule ^es/(.+)$ index.php?lang=es&id=$1 [L]
RewriteRule ^en/(.+)$ index.php?lang=en&id=$1 [L]

Y entonces, dentro del archivo index.php, incluyes un contenido u otro dependiendo de las variables "lang" e "id", y no tienes que volver a tocar el htaccess. Además, como seguramente las diferentes páginas contengan algunos elementos iguales (estilos, cabecera, menús o lo que sea), no hace falta que lo repitas todo en varios archivos (home.php, quienes.php, contact.php), si no que lo pones todo en index.php y sólo modificas el contenido según el caso.

Espero haberme explicado!

Saludos
  #3 (permalink)  
Antiguo 29/02/2012, 00:27
 
Fecha de Ingreso: marzo-2006
Mensajes: 75
Antigüedad: 18 años, 8 meses
Puntos: 1
Respuesta: problema con htaccess

Gracias!! ahora ye me funciona
  #4 (permalink)  
Antiguo 29/02/2012, 01:27
 
Fecha de Ingreso: marzo-2006
Mensajes: 75
Antigüedad: 18 años, 8 meses
Puntos: 1
Respuesta: problema con htaccess

Si no es mucha molestia tengo otra duda. La verdad es que he mirado mucho por ahí, y o bien se explica en poca profundidad, pero los ejmplos no me ayudan a entender. Ahora tengo otro problema.

Imaginate que cargo mediante get una variable que se refiere a un id de una subcategoria que tengo, por ejemplo galeria.php?expo=gastronomia

Esta variable es única para la subcategoría, pero cuando uso el htacces me gustaría que se tradujese deendiendo si estas en es/en. Yo tengo esto:

RewriteRule ^trabajos/(\w+)$ galeria.php?expo=$1&lang=es [L]
RewriteRule ^portfolio/(\w+)$ galeria.php?expo=$1&lang=en [L]

galeria.php?expo=gastronomia --> trabajos/gastronomia

En Es me funciona bien, porque puedo recoger la variable mediante get y trabajar con ella, pero en inglés el problema es que la variable que me recoge es la variable traducida: gastronomy, con lo cual me desmonta el chiringuito.

¿Hay alguna forma autmàtica para que yo pase una url amigable por ejemplo, trabajos/gastronomy pero en el htacess me figure la variable expo=gastronomia?

Muchas gracias!
  #5 (permalink)  
Antiguo 29/02/2012, 11:51
Avatar de charlyalegret  
Fecha de Ingreso: septiembre-2011
Ubicación: Barcelona
Mensajes: 705
Antigüedad: 13 años, 1 mes
Puntos: 140
Respuesta: problema con htaccess

Bueno... yo, lo que haría es lo siguiente (que no quiere decir que esté bien hecho, soy bastante nuevo en esto...).

Así, si ahora tienes algo del estilo:

Código PHP:
Ver original
  1. if ($lang == "es" AND $expo == "gastronomia") {
  2.       loquesea de gastronomía en español
  3. }
  4. elseif ($lang == "en" AND $expo == "gastronomia") {
  5.       loquesea de gastronomía en inglés
  6. }

Porqué no lo haces de la siguiente manera?

Código PHP:
Ver original
  1. if ($expo == "gastronomia") {
  2.       loquesea de gastronomía en español
  3. }
  4. if ($expo == "gastronomy") {
  5.       loquesea de gastronomía en inglés
  6. }

Si vas a tener un volumen grande de posibilidades con $expo, lo mejor es separar las variables de la plantilla galeria.php, de manera que creas un archivo donde tienes lo anterior, donde defines todas las variables posibles para todas las categorías, y luego en la plantilla galeria.php, haces un include del archivo con las variables. De esta manera separas lo que sería la estructura del valor de las variables, y si un día añades una nueva, sólo tienes que añadir un nuevo if en el archivo con las definiciones. Habitualmente también se hace usando bases de datos, pero eso ya es otro tema...

Saludos

Etiquetas: htacess, página, 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 08:02.