Problemas url amigables duplicadas

Estoy diseñando mi web con php (nada de wordpress ni jomla) y estoy intentando crear url amigables mediante htaccess, pues bien, he conseguido crear la url amigable correctamente, pero mi problema y consulta es el siguiente:
Si en mi web hoy alguien publica un post con url amigable por ejemplo midominio.com/me-llamo-pepe/ y mañana otro usuario también llamado pepe publica un post también diciendomidominio/me-llamo-pepe.
¿Cómo soluciono este problema de url duplicadas? ¿Cómo podría diferenciar estas 2 urls y evitar que se dupliquen?

Respuesta

Depende de la lógica con la cual estás trabajando.

Lo que yo he implementado es mantener la url amigable en la base de datos como campo en la misma tabla donde guardas el post. Entonces, en el momento de guardar el post pregunto por si la url amigable resultante existe en la tabla de post. Si existe, puedes alertar al usuario para que modifique arbitrariamente la url amigable, o en caso contrario, puedes hacer que el sistema genere esa diferencia de manera automática.

Por ejemplo, si existe una url /me-llamo-pepe/ el sistema podría generar un bucle por el cual vaya agregando un número al final, hasta que esa url sea única.

Arrojaría urls de este tipo:

/me-llamo-pepe/

/me-llamo-pepe2/

/me-llamo-pepe3/

/me-llamo-pepe-n/


Si te interesa alguna de estas lógicas, podría ayudarte a implementarla.

Hola, antes que nada muchas gracias por tu respuesta que es excelente y muy completa.

Había pensado una solución similar a la que propones, pero te agradecería mucho si puedes ayudarme a implementarla, es decir en el momento de consultar si existe un contenido idéntico a la url amigable guardada en mysql, por ejemplo campo link, ¿qué sistema podría implementar para que en el caso de existir un url idéntico ya guardado al momento de crear y guardar el nuevo post, se aplique una suma progresiva a links idénticos guardados anteriormente como el que muestras en el ejemplo?

muchas gracias nuevamente!

Como desconozco la implementación podría armar la lógica de manera clara para que la puedas implementar en tu software

$enlace = mysqli_connect("localhost", "mi_usuario", "mi_contraseña", "world");
//Considerando que estamos en el bloque que hará guardado de la base de datos
//Asumo tmbié que el valor de la url amigable viene desde post
$url_amigable = $_POST["url_amigable"];
//tenemos la variable que se incrementará cada vez que detectemos que la url existe.
$cont_intentos = 1;
do{
//haz una consulta en donde busques cuantos registros hay con esa url
//desconozco tu implementacion a base de datos asi que armaré la query
$sql= "select count(id_post) as cont from post where url_amigable='".$url_amigable."'";
$resultado = mysqli_query($enlace, $sql);
//aca rescatas el resultado de la query que entregará la cantidad de registros
$row = mysqli_fetch_assoc($resultado);
if($row["cont"]!=0){
//modifico el valor de la url amigable para que vuelva a ser evaluado
$url_amigable = $url_amigable.$cont_intentos;
$resp = true;
}else{
$resp = false;
}
//evaluará hasta que no existan urls amigables iguales dentro de tu tabla
}while(!$resp);
//cuando guardes el post utiliza la variable $url_amigable ya que es esa la que se 
//está modificndo 
//no la que viene desde el formulario

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas