PHP - URL amigables con htaccess

 
Vista:
Imágen de perfil de sergio
Val: 29
Ha aumentado su posición en 8 puestos en PHP (en relación al último mes)
Gráfica de PHP

URL amigables con htaccess

Publicado por sergio (12 intervenciones) el 05/04/2017 20:08:11
Muy buenas a todos, seguramente este es un tema muy trillado... la cuestión es que por más tutoriales que veo no consigo hacer que las URL de mi sencillo blog (hecho a medida) sean amigables. Os paso mi código PHP y el archivo htaccess por si me podéis echar una mano. :-D

URL BLOG: http://localhost/sergio/blog.php

Cuando selecciono una entrada me lleva a otra página: DETALLE_ENTRADA.PHP

URL DETALLE_ENTRADA: http://localhost/sergio/detalle_entrada.php?id=1&con=esto-es-una-prueba

Como veis estoy pasando dos parámetros desde sergio/blog a sergio/detalle_entrada.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?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ñadimos los guiones
      $find = array(' ', '&', '\r\n', '\n', '+');
      $url = str_replace ($find, '-', $url);
      // Eliminamos y Reemplazamos otros carácteres especiales
      $find = array('/[^a-z0-9\-<>]/', '/[\-]+/', '/<[^>]*>/');
      $repl = array('', '-', '');
      $url = preg_replace ($find, $repl, $url);
      return $url;
}
?>
 
 
<?php
$sql = ("SELECT id, usuario, fecha, titulo, contenido_corto, imagen, url FROM entradas ORDER BY id DESC");
$result = mysqli_query($con,$sql);
 
include "functions.php";
 
while ($line = mysqli_fetch_array($result)) {
$titulo = urls_amigables($line['titulo']);
echo "<a href=\"detalle_entrada?id=".$line['id']."&con=".$titulo."\">Leer artículo</a>";
 
}
 
mysqli_close($con);
?>

y este es mi código en htaccess:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
AddDefaultCharset UTF-8
 
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php
RewriteRule ^([a-z]+)/?$ $1.php [NC]
 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.*)$ $1.html
RewriteRule ^([a-z]+)/?$ $1.html [NC]
</IfModule>
 
ErrorDocument 404 http://localhost/sergio/404.php
 
<IfModule mod_rewrite.c>
RewriteEngine On
#RewriteBase /sergio/
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
Rewriterule ^sergio/(.*)/(.*) detalle_entrada.php?id=$1&con=$2
</IfModule>

Espero que alguien me pueda iluminar en este oscuro universo :-P

MIL GRACIAS!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

URL amigables con htaccess

Publicado por xve (6935 intervenciones) el 06/04/2017 07:50:21
Hola Sergio, creo que no tienes correctamente el htaccess... yo aria algo así:

1
RewriteRule ^sergio/(.*)/(.*)$ /detalle_entrada.php?id=$1&con=$2 [L,NC]

Si las RewriteCond... solo esa linea!!!

De esta manera, todo lo que sea:
1
/sergio/25/casa
ira a
1
/detalle_entrada.php?id=25&con=casa

Te sirve?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de SERGIO
Val: 29
Ha aumentado su posición en 8 puestos en PHP (en relación al último mes)
Gráfica de PHP

URL amigables con htaccess

Publicado por SERGIO (12 intervenciones) el 06/04/2017 08:10:14
Buenos días xve, gracias por tu ayuda.

He quitado las RewriteCond dejando solo la línea que me has facilitado, pero sigue sin funcionar. Hay algo que se me escapa de las manos y no se que es... Seguiré intentandolo!!! :-D
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de SERGIO
Val: 29
Ha aumentado su posición en 8 puestos en PHP (en relación al último mes)
Gráfica de PHP

URL amigables con htaccess

Publicado por SERGIO (12 intervenciones) el 06/04/2017 13:02:23
¿Alguna idea? pues no hay manera...no sé que es lo que falla... Si alguien pudiera aportar otra idea!!! Thanksss
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

URL amigables con htaccess

Publicado por xve (6935 intervenciones) el 06/04/2017 16:29:25
Si pones en el navegador esto:
http://localhost/sergio/25/casa
que te devuelve?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de SERGIO
Val: 29
Ha aumentado su posición en 8 puestos en PHP (en relación al último mes)
Gráfica de PHP

URL amigables con htaccess

Publicado por SERGIO (12 intervenciones) el 06/04/2017 17:27:11
Hola amigo!!! ahora mismo he conseguido dejar la url así:

http://localhost/sergio/blog.php/1/esto-es-una-prueba

PHP modificado:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<?php
		require_once("includes/config/db2.php");
		require_once ("includes/config/conexion.php");
 
  $id_registro = isset($_GET['id']) ? $_GET['id'] : 'n';
  if ($id_registro == 'n') {
 
$sql = ("SELECT id, usuario, fecha, titulo, contenido_corto, imagen, url FROM entradas ORDER BY id DESC");
 
include "functions.php";
 
$result = mysqli_query($con,$sql);
 
while ($line = mysqli_fetch_array($result)) {
  $titulo = urls_amigables($line['titulo']);
	echo '<div id="post">';
			echo '<div>';
			echo "".$line['usuario']." ";
			//formato fecha americana.
			$fecha1="".$line['fecha']."";
			$fecha2=date("d-m-Y",strtotime($fecha1));
			//El nuevo valor de la variable.
			echo $fecha2;
            echo '</div>';
		  echo "<br>";
			echo '<div>';
			echo "<h2>".$line['titulo']."</h2>";
			echo "<p>".$line['contenido_corto']."</p>";
			echo "<a href=\"blog.php/".$line['id']."/".$titulo."\">Leer artículo</a>";
      /*echo "<a href=\"blog.php?id=".$line['id']."&con=".$titulo."\">Leer artículo</a>";*/
			echo '</div>';
	echo '</div>';
}
}else{
?>
</div>
</div>
 
<?php
$sql = "SELECT * FROM entradas WHERE id=".$id_registro;
$result = mysqli_query($con,$sql) or die('Consulta fallida: ' . mysqli_error());
 
 
if ($line = mysqli_fetch_array($result)) {
  echo '<div id="post_contenedor">';
  echo '<div id="post_contenido">';
  echo "<br>";
  echo '<div id="post_largo">';
  echo "<h1 class=\"titulo\">".$line['titulo']."</h1>";
  echo "<br>";
  echo '</div>';
  echo "<img id=\"image_post\" src=\"img/".$line['imagen']."\">";
  echo "<p>".$line['contenido_largo']."</p>";
  echo "<a href=\"".$line['url']."\"></a>";
  echo '</div>';
 
  $actual_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
      $twitter = '<i class="fa fa-twitter fa-3x"></i>';
      $facebook = '<i class="fa fa-facebook fa-3x"></i>';
      $linkedin = '<i class="fa fa-linkedin fa-3x"></i>';
      $google = '<i class="fa fa-google fa-3x"></i>';
      echo '<div id="iconos_compartir">';
      echo '<div>';
      echo '<span id="compartir">La vida es para compartirla:</span>';
      echo '</div>';
      echo "<a href=\"https://twitter.com/intent/tweet?url=".$actual_link."\">$twitter </a>";
      echo "<a href=\"https://www.facebook.com/sharer/sharer.php?url=".$actual_link."\">$facebook </a>"; 
      echo "<a href=\"https://www.linkedin.com/cws/share?url=".$actual_link."\">$linkedin </a>"; 
      echo "<a href=\"https://plus.google.com/share?url=".$actual_link."\">$google </a>";  
      echo '</div>';
    echo '</div>';
}
}
?>


HTACCESS modificado:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
AddDefaultCharset UTF-8
 
<IfModule mod_rewrite.c>
RewriteEngine on
#RewriteCond %{REQUEST_FILENAME} !-d
#RewriteCond %{REQUEST_FILENAME}.php -f
#RewriteRule ^(.*)$ $1.php
 
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
#RewriteRule ^blog/(.+)$ blog.php?id=$1
RewriteRule ^blog/([A-Za-z0-9-\+]+)$ blog.php?id=$1 [L]
</IfModule>
 
ErrorDocument 404 http://localhost/sergio/404.php

Me falta poder quitarle (.PHP) a blog.php y luego, cuando me redirige a: http://localhost/sergio/blog.php/1/esto-es-una-prueba
LOS ESTILOS CSS SE LOS PASA POR EL FORRO... pero hace bien la consulta.

He intentado usar url absolutas en href="http://localhost/sergio/css/style.css" y me respeta los estilos, pero entonces no redirecciona... se queda en la misma página...

Ahí voy!!! :-D
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de SERGIO
Val: 29
Ha aumentado su posición en 8 puestos en PHP (en relación al último mes)
Gráfica de PHP

URL amigables con htaccess

Publicado por SERGIO (12 intervenciones) el 06/04/2017 20:00:36
Solucionado con este htcaccess:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
AddDefaultCharset UTF-8
 
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^blog/(.+)/(.+)$ blog.php?id=$1&con=$2
</IfModule>
 
ErrorDocument 404 http://localhost/sergio/404.php
 
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
</IfModule>

Lo que estaba haciendo mal era la creación de la url en blog.php:

1
2
CORRECTO: echo "<a href=\"blog/".$line['id']."/".$titulo."\">Leer artículo</a>";
INCORRECTO: echo "<a href=\"blog.php?id=".$line['id']."&con=".$titulo."\">Leer artículo</a>";

Saludos y gracias por tu ayuda xve
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

URL amigables con htaccess

Publicado por xve (6935 intervenciones) el 06/04/2017 21:58:00
Gracias por comentarlo Sergio!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar