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

urls amigables - es necesario php?

Estas en el tema de urls amigables - es necesario php? en el foro de Apache en Foros del Web. Hola a todos, Hoy he decidio ponerme al dia con el tema de las urls amigables. Hasta la fecha, mi página de noticias propia y ...
  #1 (permalink)  
Antiguo 09/03/2010, 10:32
 
Fecha de Ingreso: septiembre-2007
Mensajes: 106
Antigüedad: 16 años, 7 meses
Puntos: 1
urls amigables - es necesario php?

Hola a todos,

Hoy he decidio ponerme al dia con el tema de las urls amigables. Hasta la fecha, mi página de noticias propia y desarrollada por mi (no utiliza cms) tenia una estructura así:

www.mipagina.com
www.mipagina.com/noticias/
www.mipagina.com/noticias/noticia.php?id=43 (por ejemplo). El 43 es el id que le asigna mi autoincremental de la DB. Dicha noticia tiene tres campos más: titulo, descripcion y fecha.

De lo que he entendido de hacer las URL's amigables me he hecho un lio. La mayoría de artículos de internet dicen que basta con modificar el .htacces pero yo con la infinidad de ejemplos que he visto no consigo hacerlo. Con el que más me he acercado ha sido con este que se intengra con php: http://www.baluart.net/articulo/urls-amigables-con-php

Pero es aquí donde voy. Solo con el .htacces no basta no ? Es decir tengo que modificar los enlaces dinámicos que hago hacia la noticia?

Es decir, en mi portada tengo mi llamada a la BD en donde listo los titulares de mis noticias y los envio hacia noticia.php?id=<?echo $fila['id']?>

Eso se debería modificar porque?

Estos son varios de los rewrite que he probado en el .htacces:


Rewriterule ^noticias/(.+)/(.+) noticia.php?id=$1&titulo=$2 [L,NC]
RewriteRule ^noticias$ ./noticia.php?id=$1&titulo=$2
RewriteRule ^noticias/([0-9]+)/[a-z0-9_-]+\.php /noticia.php?id=$1
RewriteRule ^noticias$ ./noticia.php [L,NC]

Todos ellos con y sin [L,NC] final (ya que nadie pone para que sirve...)

En fin, alguien experimentado que esto lo tenga chupado?

O simplemente un enlace a un articulo de un código que funcione y que no sea uno más de los que he visto copiados y pegados en 100 webs el mismo?

Mil gracias!
  #2 (permalink)  
Antiguo 09/03/2010, 10:34
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: urls amigables - es necesario php?

1.- no tiene mucho q ver con php
2.- tienes mal hechas tus reglas
Cita:
Rewriterule ^noticias/(.+)/(.+) noticia.php?id=$1&titulo=$2 [L,NC]
RewriteRule ^noticias$ ./noticia.php?id=$1&titulo=$2
RewriteRule ^noticias/([0-9]+)/[a-z0-9_-]+\.php /noticia.php?id=$1
RewriteRule ^noticias$ ./noticia.php [L,NC]
3.- si, solo necesitas el htaccess..
__________________
More about me...
~ @rhyudek1
~ Github
  #3 (permalink)  
Antiguo 09/03/2010, 10:36
Avatar de blogger  
Fecha de Ingreso: diciembre-2005
Ubicación: frente al monitor
Mensajes: 398
Antigüedad: 18 años, 4 meses
Puntos: 12
Respuesta: urls amigables - es necesario php?

Y necesitas actualizar todos tus enlaces, para que se ajusten a las reglas del .htaccess
__________________
http://exegesis-biblica.com/
  #4 (permalink)  
Antiguo 09/03/2010, 10:42
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 14 años, 10 meses
Puntos: 641
Respuesta: urls amigables - es necesario php?

mira yo sufrí mucho con las urls amigables, al final yo no he movido nada del php solo del htacces, y puse una regla simple

para empezar debes poner esto de a fuerza

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

ya que sin lo de arriba no me funka

lugo simple y sencillamente

RewriteRule ^(.*)/(.*) $1.php?id=$2 [L,QSA]

con esto todo lo que escriba de esta forma
y eso se hace manualmente

http://misitio.dom/archivo/loquesea

lo interpreta

http://misitio.dom/archivo.php?id=loquesea

asi las variables que pasas por get las captura en $1 y $2 esto es simple, cada (.*) representa un $numero

pero puedes poner 3,4,5 variables de esa forma y como te digo yo no he cambiado nada de mi php

[L] es lo que se denomina flag

yo sufrí muchisimo con las urls amigables ya que no entendia el concepto, pero creo que me he explicado bien.

en tu caso sería algo así:

Cita:
RewriteRule ^noticias/(.*)/(.*) $1.php?id=$2 [L,QSA]

y al escribir esto en tu navegador:

www.mipagina.com/noticias/noticia/43

te saldra el contenido de esta página:

www.mipagina.com/noticias/noticia.php?id=43

Última edición por memoadian; 09/03/2010 a las 10:48
  #5 (permalink)  
Antiguo 09/03/2010, 10:46
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: urls amigables - es necesario php?

http://www.addedbytes.com/cheat-shee...e-cheat-sheet/
aca tienes una chuleta (cheat sheet) para que te ayudes un poco con el asunto!
__________________
More about me...
~ @rhyudek1
~ Github
  #6 (permalink)  
Antiguo 09/03/2010, 11:39
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Tema movido desde PHP a Apache
  #7 (permalink)  
Antiguo 09/03/2010, 12:29
 
Fecha de Ingreso: septiembre-2007
Mensajes: 106
Antigüedad: 16 años, 7 meses
Puntos: 1
Respuesta: urls amigables - es necesario php?

nada, no hay manera.

Ahora mismo, lo tengo así:

.htacces:

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Rewriterule ^noticias/(.+)/(.+) noticia.php?id=$1&titulo=$2


.index.php donde llamo al noticia.php?id=loquesea:


<?php
function urls_amigables($url) {

// Tranformamos todo a minusculas

$url = strtolower($url);

//Rememplazamos caracteres especiales latinos

$find = array('á', 'é', 'í', 'ó', 'ú', 'ñ');

$repl = array('a', 'e', 'i', 'o', 'u', 'n');

$url = str_replace ($find, $repl, $url);

// Añaadimos los guiones

$find = array(' ', '&', '\r\n', '\n', '+');
$url = str_replace ($find, '-', $url);

// Eliminamos y Reemplazamos demás caracteres especiales

$find = array('/[^a-z0-9\-<>]/', '/[\-]+/', '/<[^>]*>/');

$repl = array('', '-', '');

$url = preg_replace ($find, $repl, $url);

return $url;

}

while($fila = mysql_fetch_array($resListar)) { ?>

<?$url = $fila['titulo'];?>

<h5><?php echo "(".date('d/m/Y', getTimestamp($fila["fecha"])).")"; ?></h5>




<p><?php echo $fila['titulo']; ?> <a href="noticias/<?php echo $fila['id']?>/<?echo urls_amigables($url);?>/">(+)</a></p>


<?php } ?>


Y nada. el ejemplo es de http://www.baluart.net/articulo/urls-amigables-con-php que realmente tiene una pinta buenísima

Y realmente me genera: http://www.mipagina.com/noticias/159...et-crece-un-5/

Pero me da pagina not found!

Alguna solucion?

gracias
  #8 (permalink)  
Antiguo 09/03/2010, 12:36
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 14 años, 10 meses
Puntos: 641
Respuesta: urls amigables - es necesario php?

lo que pasa es que has entendido mal ese articulo

esa funcion sirve para que tu al meter un titulo de tus paginas por ejemplo

yo soy el mero mero niño

te de:

http://misitio.dom/noticias/yo-soy-el-mero-mero-nino

pero si y solo si

tu variable es el titulo de dicha página, o sea que de nada sirve que pongas eso si realmente tu variable es '43' entiendes

esa funcion no genera nada más que la forma en como escribir tu url amigable dependiendo de como sea tu variable GET

para que sea del titulo

tendrias que llamar por get $title=$_GET['title'];

y en tu url poner

http://misitio.dom/noticias.php?titl...mero-mero-nino

pero para que eso funcione tendrías que crear una BD donde

id=yo-soy-el-mero-mero-nino este asociado a una variable numero 43

de tu noticia, espero haber sido claro.

Última edición por memoadian; 09/03/2010 a las 12:42
  #9 (permalink)  
Antiguo 09/03/2010, 17:42
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 21 años, 10 meses
Puntos: 8
Respuesta: urls amigables - es necesario php?

Cita:
Iniciado por Hidek1 Ver Mensaje
http://www.addedbytes.com/cheat-shee...e-cheat-sheet/
aca tienes una chuleta (cheat sheet) para que te ayudes un poco con el asunto!
Gracias compañero , esto está muy completo, no me ha dado tiempo de leerlo todo pero seguro que cuando termine sabré resolver mi problema.
(::
Un saludo
__________________
Videotutoriales de Drupal
  #10 (permalink)  
Antiguo 10/03/2010, 04:17
 
Fecha de Ingreso: septiembre-2007
Mensajes: 106
Antigüedad: 16 años, 7 meses
Puntos: 1
Respuesta: urls amigables - es necesario php?

Gente la verdad que agradezco muchísimo la ayuda, pero sigo sin enterarme. La verdad me siento bastante inutil con esto.

Realmente ahora lo que he conseguido hacer con esto:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /home/xxxx/public_html/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

Rewriterule ^miurlvirtual/([0-9]+)/[a-z0-9_-]+/ http://www.mipagina.com/noticias/noticia.php?id=$1&titulo=$2 [L,NC]
RewriteRule ^miurlvirtual$ http://www.mipagina.com/noticias/noticia.php [L,NC]

Esto, lo que me hace ahora mismo es:

Que si yo tecleo: http://www.mipagina.com/miurlvirtual...et-crece-un-5/

Me redirige a: http://www.mipagina.com/noticias/noticia.php?id=159 (hasta aquí bien)

Pero es que lo que me gustaría es que en el navegador se quedase la URL virtual no?

No se trata de eso las url's amigables? Realmente lo que me hace ahora es una simple redirección.

La verdad es que estoy espesito, espesito, pero como dice memodian puede ser que no tenga el concepto claro.

En este último ejemplo he pasado de la función que comentaba. Es simplemente el .htaccess

Gracias!
  #11 (permalink)  
Antiguo 10/03/2010, 04:54
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 21 años, 10 meses
Puntos: 8
Respuesta: urls amigables - es necesario php?

Compañero ya somos dos , pero de todas formas no entiendo como el navegador te muestra la url a la que va realmente , debería de mostrarte la amigable (según creo).

El problema que yo tengo y no consigo resolver desde hace dias, es que tengo dentro de la carpeta tienda/ un htacces que sobrescribe correctamente todas las urls menos esta (seguro que algo hago mal (::):
Código:
RewriteRule ^cesta-compra/([0-9]*)/([0-9a-zA-Z]*)/([0-9]*)/([0-9]*)/([0-9a-zA-Z]*)/([0-9a-zA-Z]*)$ 
index.php?catid=$1&nombre=$2&id=$3&precio=$4&img=$5&ref=$6 [L]
Insisto el htacces no esta en el root sino en la carpeta tienda (donde se encuentra dicho index.php).

Por cierto en muchos ejemplos he visto que la gente pone al final de la regla un /?$, ¿exactamente epara que es la interrogación?, de todas formas lo ponga o no no me funciona el tema .

Un saludo
__________________
Videotutoriales de Drupal
  #12 (permalink)  
Antiguo 10/03/2010, 04:56
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 21 años, 10 meses
Puntos: 8
Respuesta: urls amigables - es necesario php?

Por si esto te sirve de algo: (a mi me ha servido para algunas cosas pero no para resolver lo que acabo de postear).
http://www.addedbytes.com/for-beginn...r-beginners/:-)
__________________
Videotutoriales de Drupal
  #13 (permalink)  
Antiguo 21/06/2010, 11:38
 
Fecha de Ingreso: junio-2010
Mensajes: 1
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: urls amigables - es necesario php?

hola muy interesante la informacion,.. He visto algunas urls que no manejan codigos es decir: si quiero ir a un contenido cuyo id es 125 seria algo asi en urls amigables

mipagina.com/noticias/125

pero algunas manejan algo asi:

mipagina.com/noticia/inflacion-interna

es decir el codigo es reemplazado por una palabra descriptiva, sabe alguien como conseguir eso, porque para mostrar la informacion lo que necesito es el codigo (125) y en base a esto hago el query necesario....

Soy nuevo en el foro.. espero estar escribiendo en el lugar y de la forma correcta

les agradezco su ayuda...

Etiquetas: amigables, php, 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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 01:03.