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

Otra consulta sobre URL amigable, pero para varias URL's

Estas en el tema de Otra consulta sobre URL amigable, pero para varias URL's en el foro de Apache en Foros del Web. Hola amig@s, Por más que he buscado, he hecho pruebas y de todo, no consigo solucionar este tema. La situación es la siguiente: Necesito hacer ...
  #1 (permalink)  
Antiguo 13/06/2012, 01:30
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 21 años
Puntos: 154
Otra consulta sobre URL amigable, pero para varias URL's

Hola amig@s,

Por más que he buscado, he hecho pruebas y de todo, no consigo solucionar este tema. La situación es la siguiente:

Necesito hacer varias URL's amigables en el mismo sitio, pero sin que afecte a los subdirectorios y que funcionen igual si el usuario coloca '/' al final o no.

Tengo un .htaccess así:

Código .htaccess:
Ver original
  1. <IfModule mod_rewrite.c>
  2. Options +FollowSymLinks
  3. RewriteEngine on
  4.  
  5. RewriteRule ^(.*)/enlaces$ miembros/enlaces_.php?ref=$1 [L]
  6. RewriteRule ^(.*)/otra_pagina$ miembros/otra_pagina_.php?ref=$1 [L]
  7.  
  8.  
  9. RewriteRule ^(.*)/$ miembros/index.php?ref=$1 [L]
  10.  
  11. </IfModule>

Lo que pretendo con esto es que el visitante acceda a www.dominio.com/usuario/enlaces y así con todas...

Así, aparentemente funciona, pero he tenido que añadir en los subdirectorios otro .htaccess así (por probar, y parece que funciona)

Código .htaccess:
Ver original
  1. Options +FollowSymLinks
  2. RewriteEngine On
  3. RewriteBase /
  4.  
  5. RewriteCond %{REQUEST_FILENAME} !-f
  6. RewriteCond %{REQUEST_FILENAME} !-d
  7. RewriteCond %{REQUEST_URI} !^/index.php
  8. RewriteCond %{REQUEST_URI} (/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$ [NC]
  9. RewriteRule ^(.+)/?$ index.php?ref=$1 [L]

Este último lo he copiado de este post y, aunque no consigo entender lo de las benditas expresiones regulares, más o menos entiendo lo que hace.

Ahora bien, lo que yo necesito es que las URL's funcionen de esta forma:

El usuario normalmente escribe: www.dominio.com/usuario y tal como lo tengo, da error 404, es necesario que el usuario escriba www.dominio.com/usuario/ y ahí es donde está el problema, con el segundo código funciona bien sin la '/', pero sólo cuando van a la dirección principal, por eso he tenido que probar con el primero, pero en ese no funciona si no escriben la '/' al final.

El asunto es que, como no consigo entender bien las expresiones regulares (y me he releído como 10 tutoriales), no hay manera de hacer funcionar esto de las URL's, por eso mi pregunta es:

¿Alguien me puede echar una mano con el código que debería utilizar para que esto funcione? Si es posible, y alguien me puede ayudar, y no es mucho pedir, agradecería muchísimo que aparte de enseñarme el código, me lo explicara como a un niño de 2 años, a ver si consigo entenderlo.

Muchísimas gracias por adelantado.
.
  #2 (permalink)  
Antiguo 14/06/2012, 21:45
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 4 meses
Puntos: 1567
Respuesta: Otra consulta sobre URL amigable, pero para varias URL's

@rbczgz
Lei (y releí) tres veces tu post y sinceramente no entiendo nada, entre el primer ejemplo, el segundo y el enunciado final no encuentro relación alguna
Así que me quedo con esto
Cita:
El usuario normalmente escribe: www.dominio.com/usuario y tal como lo tengo, da error 404, es necesario que el usuario escriba www.dominio.com/usuario/
Por lo de remover el trailing slash(barra final), podés usar esto como primera regla

Código Apache:
Ver original
  1. # Remover trailing slashes.
  2. # ejemplo  miweb.com/algo/ redirije a miweb.com/algo
  3. RewriteCond %{REQUEST_FILENAME} !-d
  4. RewriteRule ^(.+)/$ /$1 [R=permanent,QSA]

y luego probá las otras

De paso te aclaro que la directiva
Options, no es dependiente del modulo mod_rewrite, asi que sacala del bloque y ponela como primera linea del .htaccess


Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #3 (permalink)  
Antiguo 03/07/2012, 06:54
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 21 años
Puntos: 154
Respuesta: Otra consulta sobre URL amigable, pero para varias URL's

Hola @emprear,

Disculpa por tanto retraso en la respuesta y muchas gracias por tu colaboración.

Tienes razón en lo complicado de la consulta. El tema es que necesitaba las dos cosas:
  1. Hacer las URL's amigables
  2. Que funcionaran tanto con "/" al final como sin ella.

Cuando me respondiste ya andaba haciendo pruebas y más pruebas porque había desesperado de que nadie respondiera y, después de muchas pruebas, aunque se que no es la manera correcta y es muy laborioso, lo resolví de esta forma:

(Dejo aquí el código que he usado por si le sirve a alguien aunque no sea la mejor forma de hacerlo...)

Código htaccess:
Ver original
  1. Options +FollowSymLinks
  2. <IfModule mod_rewrite.c>
  3. RewriteEngine on
  4. RewriteBase /
  5.  
  6. # Esto debería agregar un / slash al final
  7. RewriteCond %{REQUEST_URI} !(\.[^/]*|/)$
  8. RewriteRule ^(.*[^/])$ /$1/ [R=301,L]
  9.  
  10. RewriteRule ^([^/]*)/pagina_con_muchas_variables/([^/]*)/([^/]*)/([^/]*)/([^/]*)/$ dir/pagina_con_muchas_variables_.php?var=$1&a=$2&b=$3&c=$4&d=$5 [L]
  11.  
  12. RewriteRule ^(.*)/pagina_con_una_variable/$ dir/pagina_con_una_variable_.php?var=$1 [L]
  13.  
  14. #Para redirigir la página principal con una variable
  15. RewriteRule ^(.*)/$ dir/index.php?ref=$1 [L]
  16.  
  17. </IfModule>


Problema: Cada vez que añado una página tengo que modificar el .htaccess para añadir la redirección a la URL amigable.

Sigo aceptando cualquier ayuda para resolverlo de mejor forma y sobre todo para aprender a hacer las cosas bien.

Muchas gracias de nuevo.

.

Etiquetas: dominio, htaccess, php, rewrite, 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 09:05.