elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web (Moderador: #!drvy)
| | |-+  Duda con las rutas amigables de mi web
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda con las rutas amigables de mi web  (Leído 2,664 veces)
Hekaly

Desconectado Desconectado

Mensajes: 85



Ver Perfil WWW
Duda con las rutas amigables de mi web
« en: 13 Noviembre 2012, 13:36 pm »

Buenas a todos.

Venia a preguntaros una duda que tengo sobre las URL. Resulta que en mi web el archivo index.php esta en la raiz y después tengo una carpeta llamada include donde estan los archivos, menu.php, sidebar.php, etc y ademas tengo la carpeta secciones con varios archivos php (1 por sección).

Bien, cuando quiero ver por ejemplo una noticia la url me pone lo siguiente localhost/dominio/includes/secciones/noticias.php?id=xxx (siendo xxx el id de noticia).

Y quiero convertirlo es en dominio.org/noticias/TITULO_NOTICIA

Lo que me importa es como hacer para quitar "/includes/secciones" ya que no me gutaria que un usuario sepa las rutas reales de los archivos.

Quitando por hecho que localhost/dominio es por que estoy en local y se transformara en dominio.com al subirlo a un servidor web..., se que con las opciones RewriteEngine/
RewriteBase/RewriteCond/RewriteRule del htaccess puedo llegar a quitar las extensiones de los archivos asi como evitar ver las variables y ponerlas tipo noticias/TITULO_NOTICIA/, ahora bien, se puede hacer con htacces quitar parte de la ruta local "includes/secciones"?

Probe a usar esto.

Código:
RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)$ fichaJuego.php?id=$1
RewriteRule ^([a-zA-Z0-9_-]+)/includes/secciones/$ fichaJuego.php?id=$1
 

RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)$ fichaJuego.php?id=$1&juego=$2
RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)/includes/secciones/$ fichaJuego.php?id=$1&juego=$2

y esto

Código:
RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)$ fichaJuego.php?id=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ fichaJuego.php?id=$1
 

RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)$ fichaJuego.php?id=$1&juego=$2
RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)/$ fichaJuego.php?id=$1&juego=$2

Pero cuando abro la web me da error 500, como si no encontrase ningun archivo.

Tengo entendido que php tiene funciones para coger por variable la PATH, se podria hacer eso, quitar con substr "includes/secciones" y usar esa variable en los cada href, funcionaria??.

Hay alguna funcion en php para eliminar partes de la ruta absoluta??? o decirle al servidor que todo lo que este dentro de "includes/secciones" no lo muestre en la url?? o por el contrario deberia tener todos los archivos php de mi web en la raiz para evitar esto??

Espero que me puedan ayudar, muchas gracias.


En línea

#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.855



Ver Perfil WWW
Re: Duda con las rutas amigables de mi web
« Respuesta #1 en: 13 Noviembre 2012, 13:52 pm »

Hola,

Código
  1. <IfModule mod_rewrite.c>
  2. Options +FollowSymLinks
  3. RewriteEngine On
  4.  
  5. # Si el archivo no es un directorio
  6. RewriteCond %{REQUEST_FILENAME} !-d
  7.  
  8. # Al solicitar dominio.com/noticias/1
  9. # lo procesara como dominio.com/includes/secciones/noticias.php?id=1
  10. # sin mostrar la ruta completa.
  11. RewriteRule ^noticias/([A-Za-z0-9-]+)/?$ includes/secciones/noticias.php?id=$1 [L]
  12.  
  13. </IfModule>

Así suponiendo que noticias.php solo imprime la variable (get) id, el resultado de solicitar dominio.com/noticias/adasda1

Sera:
Código
  1. adasda1

Espero que te sirva.

Saludos


En línea

Hekaly

Desconectado Desconectado

Mensajes: 85



Ver Perfil WWW
Re: Duda con las rutas amigables de mi web
« Respuesta #2 en: 13 Noviembre 2012, 14:02 pm »

Gracias por la rápida respuesta drvy | BSM.

He copiado el código y al pulsar en la noticia en concreto me sigue apareciendo la ruta completa. Seguramente tenga algo mal, seguiré mirando y probando con tu código.

http://infojuegos.org/includes/secciones/noticia.php?id=1

Aun así, la web ya la subí en su momento infojuegos.org.

Voy a mirar también con un juego de los que tengo de prueba a ver si me quita la maldita ruta /includes/secciones

Lo dicho, gracias y seguiré informando.

Un saludo.


Act: Por cierto drvy | BSM , he estado investigando y al parecer 1and1 tiene problemas con el archivo .htaccess y otras cositas, y como estoy en ese hosting es posible que no me funcione el codigo.
« Última modificación: 13 Noviembre 2012, 14:07 pm por Hekaly » En línea

#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.855



Ver Perfil WWW
Re: Duda con las rutas amigables de mi web
« Respuesta #3 en: 13 Noviembre 2012, 18:38 pm »

Hola,

Citar
He copiado el código y al pulsar en la noticia en concreto me sigue apareciendo la ruta completa. Seguramente tenga algo mal, seguiré mirando y probando con tu código.

http://infojuegos.org/includes/secciones/noticia.php?id=1

Eso es completamente normal. Si pones la ruta completa, el script que te he pasado no tiene nada que hacer.

Para que funcione bien, necesitas cambiar el modo en el que tu pagina lleva los enlaces.
Así, tienes que hacer que en vez de que te lleve a http://infojuegos.org/includes/secciones/noticia.php?id=1, te lleve a http://infojuegos.org/noticias/1 cuando haces click en un enlace.

Vamos, que tienes que cambiar la forma en la que se manejan los enlaces en el codigo de tu pagina.

Puedes hacerlo todo mediante HTACCESS ? Si pero NO te lo recomiendo para nada.
Tendrías que redireccionar al usuario cada vez que este haga click en un enlace. Eso ralentiza tu pagina web y los buscadores tipo Google te penalizan por mostrarles 301 cada vez que inspeccionan un enlace en tu pagina.

Aquí tienes como hacerlo pero repito "NO TE LO RECOMIENDO PARA NADA".

Código
  1. <IfModule mod_rewrite.c>
  2. Options +FollowSymLinks
  3. RewriteEngine On
  4.  
  5. # Si el archivo no es un directorio
  6. RewriteCond %{REQUEST_FILENAME} !-d
  7.  
  8. # Al solicitar dominio.com/noticia/1
  9. # lo procesara como dominio.com/includes/secciones/noticia.php?id=1
  10. # sin mostrar la ruta completa.
  11. RewriteRule ^noticia/([A-Za-z0-9_-]+)/?$ includes/secciones/noticia.php?id=$1 [L]
  12.  
  13. # En caso de que el visitante acceda mediante la ruta completa
  14. # redirigir a la ruta corta.
  15.  
  16. # Esto redirigiria dominio.com/includes/secciones/blalba.php?id=234234 a
  17. # dominio.com/blalba/234234
  18.  
  19. RewriteCond %{THE_REQUEST} ^(GET|POST|HEAD)\ /includes/secciones/([A-Za-z0-9]+)\.php\?id=([A-Za-z0-9_-]+)
  20. RewriteRule ^ http://dominio.com/%2/%3/? [L,R=301]
  21. </IfModule>

Saludos
« Última modificación: 13 Noviembre 2012, 18:46 pm por drvy | BSM » En línea

Hekaly

Desconectado Desconectado

Mensajes: 85



Ver Perfil WWW
Re: Duda con las rutas amigables de mi web
« Respuesta #4 en: 15 Noviembre 2012, 15:20 pm »

Buenas a todos.

Reanimo este hilo para seguir poniendo mis dudas sobre htaccess y no abrir otro distinto.

Al ser nuevo en este tema del desarrollo web tengo algunas dudas que aun no se solucionar.

La primero de todo dejo mi codigo htaccess tal y como lo tengo ahora (me falta meter mas rutas amigables, entre otros apartados).

Código:
Options All -Indexes
IndexIgnore *

<ifModule mod_php4.c>
 php_value default_charset utf-8
</ifModule>


<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(.*)$ $1.php
</IfModule>


Options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteRule ^noticia/(.+)/(.+)/?$ noticia.php?id=$1&titulo=$2
RewriteRule ^juego/(.+)/(.+)/?$ fichaJuego.php?id=$1&consola=$2
RewriteRule ^consola/(.+)/?$ fichaplataformas.php?plataforma=$1
RewriteRule ^plataforma/(.+)/?$ plataformas.php?letra=$1
RewriteRule ^plataforma/generacion/(.+)/?$ plataformas.php?generacion=$1

Las preguntas son las siguientes.

1) La parte en la que quito las extensiones de los archivos las rutas me funcionan perfectamente si no pongo el .php al final, pero si lo pongo tambien sale la pagina, mi idea es que si el usuario escribe la extension no se pueda mostrar la pagina, o la mande al a un archivo de error (ErrorDocument /error/xxxxxxxx), eso se podria llegar hacer?

2) Cuando estoy haciendo una ruta amigables es nesesario que haya dos variables en la ruta real?
Me explico, en la entrada noticias uso la variable id y titulo y usando esas dos
Código:
RewriteRule ^noticia/(.+)/(.+)/?$ noticia.php?id=$1&titulo=$2
la ruta me sale bien (http://infojuegos.org/noticia/1/Comienza%20una%20nueva%20aventura), pero si quiero hacer lo mismo con una pagina en la que utilizo solamente una variable, como por ejemplo plataformas en la que solo uso el nombre de la plataforma no me lo muestra.
Código:
RewriteRule ^consola/(.+)/?$ fichaplataformas.php?plataforma=$1
Eso por que ocurre? deberia cambia la forma en la uso las variable por get??

3) Esta duda es similar a la anterior, solo que si funciona pero a medias.

En esta ocacion tengo un listado y la idea es filtrar por una letra o por una generacion. Pero lo curioso que si uso el htaccess que tengo.
Código:
RewriteRule ^plataforma/(.+)/?$ plataformas.php?letra=$1
RewriteRule ^plataforma/generacion/(.+)/?$ plataformas.php?generacion=$1

Me aparece la consolas que empiezan por esa letra aparte de otras al igual que si pusiera una generacion, me salen las de esa mas otras.



4) Como hacer para obligar al usuario que use la ruta completa??? ejemplo.
Si yo tengo en la ruta amigable dominio.com/noticia/5/hola%20mundo y el usuario pone dominio.com/noticia/5 ó dominio.com/noticia/5/jhjhhjkhkggh No le aparezca nada, solo en el caso que lo ponga como es la ruta amigable.



Vemos que en las tres rutas se muestra lo mismo cuando solo deberia ser valida la primera opcion.

Muchas gracias por vuestas ayuda.
Un saludo.

 
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Urls Amigables (solo con el titulo)
PHP
Alex_bro 5 3,824 Último mensaje 23 Agosto 2007, 00:51 am
por Alex_bro
Como configurar el SMF para usar URL amigables.
Desarrollo Web
Graphixx 1 4,197 Último mensaje 22 Julio 2010, 20:10 pm
por soru13
URL amigables en prestashop
Desarrollo Web
snknet 1 4,788 Último mensaje 16 Noviembre 2010, 18:07 pm
por el-brujo
URLs Amigables a profundidad ? (solved)
PHP
Diabliyo 4 8,284 Último mensaje 8 Febrero 2011, 00:04 am
por Diabliyo
Url amigables
Desarrollo Web
idenergia 4 2,344 Último mensaje 15 Agosto 2016, 20:55 pm
por zonahurbana
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines