Autor Tema: Regla de reescritura de urls para lograr Urls amigables con htaccess mod_rewrite  (Leído 3635 veces)

dongax_07

  • Sin experiencia
  • *
  • Mensajes: 3
    • Ver Perfil
Buenas días a todos:

Estoy implementando un sistemas de noticias desde 0 y hasta ahora ha funcionado bastante bien. Todo funciona correctamente, eso sí, con la ur noticia.php?id=x Siendo X el ID que recoge de la busqueda.

Esto como digo funciona perfectamente. El problema viene al querer cambiar esa URL por una amigable. Y es que aunque la URL se me modifica, no me llega a cargar el contenido.

Me gustaría que la URL fuera noticia/titulo-de-la-noticia.
Por lo que he leido es más recomendable hacerlo con el ID por delante noticia/01/titulo-de-la-noticia.

Os dejo el código para que lo veáis mejor y podaís orientarme.

.htaccess

Código: [Seleccionar]
# Activar RewriteEngine
RewriteEngine on
 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
 
RewriteBase /
 
Rewriterule ^noticia/([0-9]+)/(.+) noticia.php?id=$1&titulo=$2

Blog (Aquí listo las noticias)

Código: [Seleccionar]
<?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;
 
}
?>

 
 
 
<a href="noticia/'.$id.'/'.urls_amigables($titulo).'/"; "title="'.$titulo.'">'.$titulo.'</a>


Noticia (donde se muestra la noticia)

Código: [Seleccionar]
!DOCTYPE html>
 
<html class="template-page-post-image">
 
<head>
<base href="https://dominio.es" />
<?php
require('conexionBD.php');
 
$id=$_GET["id"];
$titulo=$_GET["titulo"];
 
if (
$id=$_GET["id"]){
$con_articulos "SELECT * FROM articulos inner join metas on articulos.id =  metas.id_articulo where articulos.id = $id";
$resultado mysqli_query($conexion$con_articulos);
 
while (
$tablamysqli_fetch_array($resultado)){
variables...

He estado verificando, y es como si el .htaccess no cogiese las variables. ¿alguien más le ha ocurrido? ¿Sabéis por qué no carga o qué está dando conflicto?

¡Muchas gracias!
« Última modificación: 04 de Enero 2017, 22:46 por César Krall »

dongax_07

  • Sin experiencia
  • *
  • Mensajes: 3
    • Ver Perfil
Re:(DUDA)Sistema de noticias + Url amigables htaccess
« Respuesta #1 en: 04 de Enero 2017, 09:35 »
¿Se os ocurre algo?
¡Gracias!

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Hola!

Lo primero que debes asegurarte es de que mod_rewrite esté habilitado en tu servidor y que los ficheros htaccess estén permitidos en tu configuración Apache

Prueba este código que he visto a ver si te funciona:

Código: [Seleccionar]
Options -MultiViews
RewriteEngine On

# redirect "/section.php?id=xxx" to "/section/xxx"
RewriteCond %{THE_REQUEST} \s/section\.php\?id=([0-9]+)\s [NC]
RewriteRule ^ /section/%1? [R=301,L]

# internally rewrite "/section/xxx" to "/section.php?id=xxx"
RewriteRule ^section/([0-9]+)$ /section.php?id=$1 [L]


Saludos!
Responsable de departamento de producción aprenderaprogramar.com

dongax_07

  • Sin experiencia
  • *
  • Mensajes: 3
    • Ver Perfil
Muchas gracias por contestar.

He cambiado los parámetros que me has indicado ajustándolo a lo que tengo y me salta una pantalla
Citar
Multiple Choices

The document name you requested (/noticia/3/elementos-claves-de-un-curso-de-ingles-para-ninos/) could not be found on this server. However, we found documents with names similar to the one you requested.
Available documents:

/noticia.php/3/elementos-claves-de-un-curso-de-ingles-para-ninos/ (common basename)
Please consider informing the owner of the referring page about the broken link.

Estoy usando como información adicional 1&1.

Gracias.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".