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

¿Cómo consiguen hacer esto?

Estas en el tema de ¿Cómo consiguen hacer esto? en el foro de Apache en Foros del Web. Buenas, Quisiera saber cómo hacen esto para las url amigables: Código: www.ejemplo.com/noticias/2012/11/22/esto/es/el/titulo/de/una/noticia/123.html Mi gran duda reside en que en el código fuente veo decenas urls ...
  #1 (permalink)  
Antiguo 22/11/2012, 14:59
 
Fecha de Ingreso: octubre-2008
Ubicación: Alicante
Mensajes: 337
Antigüedad: 15 años, 6 meses
Puntos: 9
¿Cómo consiguen hacer esto?

Buenas,

Quisiera saber cómo hacen esto para las url amigables:
Código:
www.ejemplo.com/noticias/2012/11/22/esto/es/el/titulo/de/una/noticia/123.html
Mi gran duda reside en que en el código fuente veo decenas urls relativas a archivos.

En un principio sé más o menos cómo trabajar con ese tipo de urls, pero siempre me ha pasado que he tenido que trabajar siempre siempre con urls absolutas. Ojalá encontrase el modo de meter barras (/) en la url, sin que las tome como directorios...

Cómo consiguen esto???? Os agradecería mil que me orientárais un poco.
  #2 (permalink)  
Antiguo 22/11/2012, 18:52
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: ¿Cómo consiguen hacer esto?

Eso se consigue con modRewrite y urls amigables.
Hay muchas formas de hacerlo, pero lo más importante es planificar bien el resultado deseado.
En cuanto poner /, es un poco exagerado en el ejemplo que has puesto. más lógico seria una cosa asi
suponniendo que tenés noticias agrupadas cronologicamente, año/mes y dia

http://www.ejemplo.com/noticias/2012...ticia-123.html


mirá este otro ejemplo
http://mr5.emprear.com/inx.html

Para conseguir eso el .htaccess contien


Código Apache:
Ver original
  1. Options +FollowSymLinks
  2. AddDefaultCharset utf-8
  3. AddCharset utf-8 .html .php
  4. RewriteEngine On
  5. RewriteBase /
  6. RewriteRule ^(.*)\:(.*)=(.*)$ $2.php?var=$3 [L,QSA]

y el php

Código PHP:
Ver original
  1. <?php
  2. header('content-type: text/html; charset=utf-8');
  3. $cadena = rawurldecode($_SERVER['REQUEST_URI']);
  4. $cadena = explode(':', $cadena);
  5. $title = substr($cadena[0], 1);
  6. ?>
  7. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  8. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  9. <html xmlns="http://www.w3.org/1999/xhtml">
  10. <head>
  11. <title><?php echo $title ?></title>
  12. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  13. </head>
  14. <body>
  15. <p>
  16. <?php
  17.  
  18. echo $cadena[0];
  19. ?>
  20. </p>
  21. <p>
  22. <?php echo $_GET['var']; ?>
  23. </p>
  24. </body>
  25. </html>

Por supuesto que eso es solo aplicable a mi ejemplo, hay muchas pequeñas variantes de acuerdo lo que necesites

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #3 (permalink)  
Antiguo 23/11/2012, 08:52
 
Fecha de Ingreso: octubre-2008
Ubicación: Alicante
Mensajes: 337
Antigüedad: 15 años, 6 meses
Puntos: 9
Respuesta: ¿Cómo consiguen hacer esto?

Hola emprear, muchas gracias por responder.

Efectivamente yo querría algo así como has puesto:
http://www.ejemplo.com/noticias/2012/11/22/esto-es-el-titulo-de-una-noticia-123.html


Pero poder trabajar con rutas relativas, osea que en el código fuente de noticia-123.html tenga por ejemplo: include("/carpeta/ejemplo.php"). Pero que realmente la carpeta /carpeta/ejemplo.php esté en la raíz del sitio. En http://www.ejemplo.com/carpeta/ejemplo.php

Que por mucha url y por muchas barras que haya en la dirección, siempre tome las rutas relativas como si fuera la raíz del sitio. Creo que ahora me he explicado un poco mejor.

Última edición por manolo_manolo; 23/11/2012 a las 08:55 Razón: Quitar links
  #4 (permalink)  
Antiguo 23/11/2012, 16:21
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: ¿Cómo consiguen hacer esto?

en ese caso no tiene mayor sentido, ya que el include es en referencia a la ruta del sistema de archivos. El navegador ve la url de la página que tiene el include, no del include en si mismo

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #5 (permalink)  
Antiguo 23/11/2012, 16:27
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 8 meses
Puntos: 2114
Respuesta: ¿Cómo consiguen hacer esto?

Lo que sí te encontrarás con ese problema con imágenes, archivos css/javascript y todo en general donde le indiques rutas al navegador. Aunque para eso puedes trabajar con rutas absolutas o simplemente indicando la ruta como "/lo/que/sea.css" como en tu ejemplo del php.
  #6 (permalink)  
Antiguo 23/11/2012, 16:57
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: ¿Cómo consiguen hacer esto?

Cita:
Iniciado por Bonez Ver Mensaje
Lo que sí te encontrarás con ese problema con imágenes, archivos css/javascript y todo en general donde le indiques rutas al navegador. Aunque para eso puedes trabajar con rutas absolutas o simplemente indicando la ruta como "/lo/que/sea.css" como en tu ejemplo del php.
Bien hacés en mencionarlo @Bonez, pòr eso repito, eso solo fue un ejemplo aplicable a un caso prticular, cualquier otro uso requerirá de los ajustes necesarios.
El post de manolo_manolo era muy genérico, también lo fue mi respuesta. Por ejemplo podríamos hacer la regla anterior de esta forma

RewriteCond %{REQUEST_URI} !^/css_js/
RewriteRule ^(.*)\:(.*)=(.*)$ $2.php?var=$3 [L,QSA]

con lo que los archivos css y js puestos en una carpeta css_js en la raíz del site se procesarían normalmente, algo similar se haría con las imágenes

Demo
http://mr5.emprear.com/Fueron%20here...%B1a:info1=uno
Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #7 (permalink)  
Antiguo 24/11/2012, 13:34
 
Fecha de Ingreso: octubre-2008
Ubicación: Alicante
Mensajes: 337
Antigüedad: 15 años, 6 meses
Puntos: 9
Respuesta: ¿Cómo consiguen hacer esto?

Me he hecho un poco de lío.

emprear la demo que has puesto, realmente dónde se encuentra el archivo que se visualiza?? Está en la raíz? O en subcarpetas??

Si en mi raíz del hosting tengo ./archivos/ejemplo.js, qué puedo poner en el .htacces para que en un archivo que esté en ./uno/dos/tres/cuatro/123.html pueda llamar con un include o un img a un archivo así, con una ruta relativa: src="/archivos/ejemplo.js"

A ver si a la tercera va la vencida, creo que antes me expliqué como el cul...

Y mil gracias!!
  #8 (permalink)  
Antiguo 24/11/2012, 14:08
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: ¿Cómo consiguen hacer esto?

Digamos a la 4ª manolo porque ahora no te explicas muy bien
un include() a un archivo de imagen?

A ver

una regla en mod_rewrite

RewriteRule ^(.*)\:(.*)=(.*)$ $2.php?var=$3 [L,QSA]
se compone de 2 partes
la primera
^(.*)\:(.*)=(.*)$
es un patrón o expresión regular

la segunda, se compone del archivo de destino
$2.php?var=$3

ahora bien a su vez, este detino puede contener variables que representan partes de la expresión regular en el orden en que fueron dadas, de esa forma,
el primer (.*) representa $1
el segundo (.*) $2
y el tercer (.*) $3

en este ejemplo

/Diario el País de Madrid, España:info1=
todo lo que esta antes de los : es $1 lo que esta entre los : y el = es $2 y lo que sigue = $3

Es decir que se construiria
info1.php?var= (no hay $3 en este caso
Ahora, lo que después haga el info1.php con esa información es otro cantar

Te repito, por favor, que no sé si mi ejemplo en este caso hace exactamente lo que vos querés, es solo una demostración.
Como ya aclaré en el post previo, la condición
RewriteCond %{REQUEST_URI} !^/css_js/
hace que los css y js contenidos en esa carpeta no sean afectados por la regla, podrías hacer
RewriteCond %{REQUEST_URI} !^/mis_fotos/
y todas las imágenes ponerlas ahi para que se visualicen correctamente.

Por lo de los includes, en mi info1.php, agregué un
include('manolo.txt'), asi de sencillo, que se encuentra en la raiz junto con info1.php
aqui el resultado
http://mr5.emprear.com/Diario%20el%2...0España:info1=

Para más información deberías consultar un tutorial sobre mod_rewrite

Salu2
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #9 (permalink)  
Antiguo 29/11/2012, 11:46
 
Fecha de Ingreso: octubre-2008
Ubicación: Alicante
Mensajes: 337
Antigüedad: 15 años, 6 meses
Puntos: 9
Respuesta: ¿Cómo consiguen hacer esto?

Cita:
Iniciado por emprear Ver Mensaje
Por lo de los includes, en mi info1.php, agregué un
include('manolo.txt'), asi de sencillo, que se encuentra en la raiz junto con info1.php
Creo que justamente eso es lo que andaba buscando, y dentro de manolo.txt no importaría las rutas ya que las toma donde está el archivo manolo.txt cierto??

La cuestión es cómo incluir manolo.txt en las subcarpetas, supongo que con una ruta absoluta... o con un $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].
  #10 (permalink)  
Antiguo 29/11/2012, 12:11
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: ¿Cómo consiguen hacer esto?

Mirá como está puesto ahora

http://mr5.emprear.com/Diario%20el%2...0España:info1=

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.

Etiquetas: amigables, 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 09:06.