Todo el mundo quiere posicionar su sitio web en la primera página de resultados de los principales buscadores. Hay muchos factores que influyen en el posicionamiento en buscadores, y uno de ellos son las URLs legibles por humanos o URLs amigables. Una URL amigable debe reflejar el contenido del sitio web o del blog.
Hay dos maneras de urls amigables en PHP. Una de ellas es utilizando el método REQUEST_URI, y la segunda manera es a través del archivo .htaccess. En este tutorial, voy mostraros como llevar a cabo las URLs amigables para vuestro blog o sitio web mediante el archivo .htaccess. Puedes utilizar esta misma práctica para implementarlo en cualquier tienda online.
Empezamos
Supongamos que tu sitio web ha sido desarrollado utilizando código PHP personalizado, es decir, un desarrollo a medida. Por lo tanto, cada vez que se insertas una nueva entrada en tu blog, la URL será generada de la siguiente manera:
www.yoursite.com/index.php?blog_id=1234
En este tutorial, vamos a cambiar la dirección de arriba por esta otra:
www.yoursite.com/my-seo-url/
Asà que, cada vez que una persona visite la URL anterior, se generará el mismo contenido que se genera cuando proporcionas el ID del artÃculo en la URL.
Paso 1: Cambios en la tabla
En primer lugar, tienes que modificar la tabla en la que se guarda el artÃculo. Crea una nueva columna en ella y llámala seo-url.
Paso 2: Función para implementar urls amigables
Vamos a crear una función que generará las urls amigables por ti, basándonos en el tÃtulo del artÃculo.
function seo_url($vp_string){ $vp_string = trim($vp_string); $vp_string = html_entity_decode($vp_string); $vp_string = strip_tags($vp_string); $vp_string = strtolower($vp_string); $vp_string = preg_replace('~[^ a-z0-9_.]~', ' ', $vp_string); $vp_string = preg_replace('~ ~', '-', $vp_string); $vp_string = preg_replace('~-+~', '-', $vp_string); $vp_string .= "/"; return $vp_string; }
A la función anterior se le pasará el tÃtulo del artÃculo como una cadena y devolverá la cadena de la url amigable. Tal que asÃ:
my-SEO-URL/
Tendrás que almacenar esta URL en la misma columna que hemos creado en el paso anterior.
Paso 3: Cambios en el archivo .htaccess
Puesto que ya hemos generado una url amigable, debemos hacer algunos cambios en el fichero .htaccess, ya que será el encargado de redirigir la nueva URL al contenido que se guarda en la base de datos. Si no lo has creado, a continuación, crea un nuevo archivo de texto plano y llámalo .htaccess. Ahora pega el siguiente código en él:
RewriteEngine On RewriteCond %{SCRIPT_FILENAME} !-d RewriteCond %{SCRIPT_FILENAME} !-f RewriteRule ^(([A-Za-z0-9]+[-]+[A-Za-z0-9]+)+[/])$ index.php?blog_url=$1 [NC,L] # Handle blog requests
Vamos a comprender paso por paso el anterior código:
La primera lÃnea indica a Apache que vamos a reescribir ciertas reglas
RewriteEngine On
La segunda y tercera lÃnea es una condición, que comprueba si la URL llamada es un archivo o un directorio real. Si esta condición es cierta, no podrá reescribirse la URL.
RewriteCond %{SCRIPT_FILENAME} !-d RewriteCond %{SCRIPT_FILENAME} !-f
Y la última lÃnea es la reescritura de la URL. Asà es cómo funciona: La cadena de después de RewriteURL, es decir, "^ (([A-Za-z0-9] + [-] + [A-Za-z0-9] +) + [/]) $", es una expresión regular que comprueba el trozo de URL de después de la barra “/", después del nombre de dominio completo.
Ahora bien, si la URL se corresponde con la expresión regular, la URL enviada será redirigida a index.php?blog_url=(url enviada), donde podremos manipularla en la variable blog_url.
Atención: Si tienes un error en el archivo .htaccess, obtendrá un error 500 en el servidor.
Paso 4: Cambios en el archivo index
Ahora en el archivo index.php podrás obtener la url utilizando la variable $_GET['blog_url']. Ya solo queda que consultes la tabla filtrando por la columna que acabamos de crear con ese valor y podrás mostrar el artÃculo requerido rápidamente. Por ejemplo, en el archivo index.php la consulta a la base de datos se llevará a cabo de la siguiente manera:
$url = $_GET['blog_url']; $query = "SELECT articles.article_name,articles.article_content,categories.category_name,articles.img,users.u_fname,users.u_lname,DATE_FORMAT(articles.date,'%d %b, %Y') as dates FROM article INNER JOIN users ON users.user_id = article.user_Id INNER JOIN articles ON articles.article_id = article.article_id INNER JOIN categories ON categories.category_id = articles.category_id WHERE articles.url = '$url'";
Por lo demás no tendrás que cambiar ni una coma de los otros archivos. Cuando ejecutes la nueva URL, obtendrás el mismo contenido que obtenÃas cuando enviabas los identificadores de los artÃculos por URL.