Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: dongax_07 en 02 de Enero 2017, 08:35
-
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
# 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)
<?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)
!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 ($tabla= mysqli_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!
-
¿Se os ocurre algo?
¡Gracias!
-
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:
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!
-
Muchas gracias por contestar.
He cambiado los parámetros que me has indicado ajustándolo a lo que tengo y me salta una pantalla 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.