Problema con URL amigables en .htaccess

srlemuuur

Gamma
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
2 Ene 2014
Mensajes
368
[SOLUCIONADO ]Problema con URL amigables en .htaccess

Buenos dias,

Creo que estoy cometiendo un error pero no encuentro cual es, les agradecería si me ayudasen a solucionarlo:

Las noticias individuales funcionan mediante id en la pag post.php?id=, la pag post.php esta al mismo nivel que index.php y .htaccess
pero en todos los ejemplos que veo aparece /noticia/Titulo-de-la-entrada y no se de donde sale.

Tampoco entiendo de donde sale el id=$2 del .htaccess

Noticia individual

Todo el contenido de mi .htaccess
Insertar CODE, HTML o PHP:
RewriteEngine On

RewriteRule ^noticia/(.+)_([0-9]+)$ post.php?id=$2


Gracias.

---------- Post agregado el 08-ene-2014 hora: 14:53 ----------

UP
 
Última edición:
A

AcidShout

¿Podrías decir qué clase de URLs utilizas? ¿Y tu .htaccess (preferiblemente completo, o si no puedes, pues la parte de los posts)?
 

srlemuuur

Gamma
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
2 Ene 2014
Mensajes
368
¿Podrías decir qué clase de URLs utilizas? ¿Y tu .htaccess (preferiblemente completo, o si no puedes, pues la parte de los posts)?

Buenos dias Adic,

Antes de nada darte las gracias por contestar:

mi htaccess sin las redirecciones, es el siguiente: (Se las borre por que no conseguia que me funcionara)
Insertar CODE, HTML o PHP:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://josepascual.com
RewriteCond %{HTTP_REFERER} !^http://www.josepascual.com
RewriteRule .*[Jj][Pp][Gg]$|.*[Gg][Ii][Ff]$ http://www.josepascual.com [L]
#josepascual.com - your custom hotlinker page

ExpiresActive on
ExpiresDefault A31536000
 

AngelSamuel

Delta
Social Media
Desde
11 May 2012
Mensajes
514
Por favor, ten en cuenta 📝 que si deseas hacer un trato 🤝 con este usuario, está baneado 🔒.

Hola,

Vayamos por partes. Si lo que quieres es hacer que el acceso a la URL sería así: http://www.dominio.com/noticia/titulo-de-la-noticia debes emplear un código .htaccess como bien vienes explayando. Ahora, que hagas posible que las URL's se puedan interpretar así no quiere decir que cuando se acceda a www.dominio.com/noticia.php?id=56 vaya a ir directamente a la URL amigable. No se si me estoy dando a entender. El código es el siguiente:

Insertar CODE, HTML o PHP:
RewriteEngine On

RewriteRule ^noticia/([a-zA-Z0-9_-]+)$ post.php?slug=$1

La $1 hace referencia a la primera "plantilla" como es: ([a-zA-Z0-9_-]+). Imagina que el código fuese: RewriteRule ^noticia/([a-zA-Z0-9_-]+)/id/([0-9]+)$ post.php?slug=$1&id=$2. Con eso diriamos que $1 es la parte del slug y $2 hace referencia a una ID numérica. ¿Me explico?.

Un saludo,
Ángel.
 
A

AcidShout

Perdón, pero me parece que no entiendo lo que intentas exactamente.
¿Estás intentando cambiar "/post.php?id=123" por "/noticias/un-marciano-llego-a-la-tierra"?
Porque si es así, tendrás que hacer cambios en el script y no sólo en el .htaccess
 

srlemuuur

Gamma
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
2 Ene 2014
Mensajes
368

Haber, yo lo que me gustaria realizar es lo siguiente:

Actualmente:
Si hago click en la url de una noticia de la home me lleva a /post.php?id=159 y la url es /post.php?id=159

Lo que quiero:
Si hago click en la url de una noticia de la home me muestre post.php?id=159 y la url sea noticias/titulo-de-la-noticia

Si resulta que tengo algo en el index o en el archivo post, no tendría ningún problema en hacerlo, ya que los he echo desde 0.

He leído que esto lo puedo hacer mediante PHP, pero no se si es lo mas recomendable.

Gracias por vuestras respuestas!
 
A

AcidShout

No lo entiendo, ¿por qué quieres que muestre "post.php?id=159"?
Lo más fácil en este caso sería cambiar "post.php?id=xx" por "/noticias/123/titulo-de-la-noticia", pero tendrías que editar el index para ello.
 

srlemuuur

Gamma
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
2 Ene 2014
Mensajes
368
No lo entiendo, ¿por qué quieres que muestre "post.php?id=159"?
Lo más fácil en este caso sería cambiar "post.php?id=xx" por "/noticias/123/titulo-de-la-noticia", pero tendrías que editar el index para ello.

¿Y que deberia poner en htaccess?
Siento mi retardez :welcoming:
 
A

AcidShout

¿Y que deberia poner en htaccess?
Siento mi retardez :welcoming:
En el htaccess:
Insertar CODE, HTML o PHP:
RewriteRule ^noticias/([0-9]+)/(.*)/?$ post.php?id=$1
RedirectMatch post.php?id=(.+) http://www.josepascual.com/noticias/$1/noticia [R=301,L]

Y tendrías que editar los links para que envíen al link correspondiente, para que sea SEO.
 

srlemuuur

Gamma
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
2 Ene 2014
Mensajes
368

Oh Gracias, lo tengo todo casi solucionado ya!!

He conseguido hacerlo con noticias/159 = y me funciona perfecto.

He creado una variable mediante la cual cojo el titulo y le meto - a los espacios y .html al final de la url, pero me esta dando esto:
The requested URL /noticias/159/el-diario-de-un-emprendedor-consolidando-una-idea-y-objetivos.html was not found on this server.

ENLACE
Insertar CODE, HTML o PHP:
<a href="noticias/<?php echo $row_Recordset1['id_blog']; ?>/<?php echo $row_Recordset1['url']; ?>" rel="bookmark"><?php echo $row_Recordset1['tit_blog']; ?></a>


HTACCESS

Insertar CODE, HTML o PHP:
# Activar RewriteEngine
RewriteEngine on
 
# Reescribir la URL solicitada por el usuario
#   Entrada:  noticias/id_not/
#   Salida: post.php?id=ID_NOT
RewriteRule ^noticias/(\w+)/?$ post.php?id=$1

me parece que el error esta en el Rewrite, me falta un $3, pero no se como sacarlo.

Gracias!

---------- Post agregado el 13-ene-2014 hora: 22:04 ----------

Ya esta solucionado, voy a crear un articulo de como lo he realizado y lo publicare en forobeta como tutorial

Si yo he podido hacerlo, todo el mundo puede!!

Muchísimas gracias a todos!
 

isaacmartinez

Delta
Diseñador
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
8 Jul 2012
Mensajes
658

resolviste con eso tengo aproximadamente el mismo problema quisiera saber como lo solucionaste.
 

srlemuuur

Gamma
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
2 Ene 2014
Mensajes
368
resolviste con eso tengo aproximadamente el mismo problema quisiera saber como lo solucionaste.

Buenos dias IsaacMartinez,

Pues te cuento:

Lo que he echo yo es lo siguiente:

HTACCESS:
Insertar CODE, HTML o PHP:
# Activar RewriteEngine
RewriteEngine on
 
# Reescribir la URL solicitada por el usuario
#   Entrada:  noticias/id_not/
#   Salida: post.php?id=ID_NOT

RewriteRule ^noticias/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)\.html$ post.php?id=$1

ENLACE INDEX.PHP
Insertar CODE, HTML o PHP:
<h1>
	<a href="noticias/<?php echo $row_Recordset1['id_blog']; ?>/<?php echo $row_Recordset1['url']; ?>" rel="bookmark"></a>
</h1>

Lo que he echo es modificar el enlace de mi index.php que antes estaba así:

Insertar CODE, HTML o PHP:
 <a href="post.php?id=<?php echo $row_Recordset1['id_blog']; ?>"></a>

Y ahora esta así:

Insertar CODE, HTML o PHP:
<a href="noticias/<?php echo $row_Recordset1['id_blog']; ?>/<?php echo $row_Recordset1['url']; ?>

El motivo es el siguiente, se que es un poco chapuzas pero me permite selecionar que url quiero poner en cada entrada:

En el formulario que tengo creado para el envio de la entrada tengo un campo llamado URL-Amigable en el cual introduzco la URL deseada:
problema-con-url-amigables-en-htaccess.html

Esta URL se guarda en la Base de datos y simplemente la llamo y la aplico en el index.php añadiendole antes el id del blog.

Como te abras fijado le añado al final .html ya que me comentario que ayuda a indexar.

Lo que hago en el HTACCESS es decirle que si le llega algo como noticias/id/titulo-de-la-noticia.html me muestre el contenido de post?id="id de la noticia":

En este caso tenemeos esto:

RewriteRule ^noticias/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)\.html$ post.php?id=$1

de lo que estraemos que:
RewriteRule ^noticias/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)\.html$ --> La id que nos llega se almacenara en $1

Entonces tenemos que ponerla en:

RewriteRule ^noticias/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)\.html$ post.php?id=$1

La verdad es que asi es como me salio mas o menos, ya que yo fui haciendo pruebas hasta que me salio, me plantee realizar un tutorial de como lo habia echo, pero es que creo que esta mal echa la forma que utilizo.

Un Saludo, siento si no entiendes nada pero es bastante tarde aquí, y quizas mañana con algo mas de tiempo pueda explicartelo mejor!