Fondo

Como se observaría en la estructura de la URL de stackoverflow, cada pregunta tiene una identificación seguida del título de la pregunta. Por ejemplo:

http://stackoverflow.com/questions/1039725/how-to-do-url-re-writing-in-php

La URL anterior tiene el ID de pregunta: 1039725 El título de la pregunta es: cómo-hacer-reescritura-de-url-en-php

Solo para jugar con esta URL, incluso si uno ingresara algunas cosas basura para la parte del título, se mostrará el mismo contenido de la pregunta siempre que la identificación de la pregunta esté allí. Por ejemplo, la siguiente URL también proporcionará el mismo contenido.

http://stackoverflow.com/questions/1039725/some-junk-stuff-title

Y MÁS IMPORTANTE , la barra de URL cambia automáticamente a:

http://stackoverflow.com/questions/1039725/how-to-do-url-re-writing-in-php

Mi pregunta

Entiendo que stackoverflow quizás use .htaccess para redirigir todas las URL con la identificación de la pregunta a algún backend (digamos una página php) para procesarlo. Pero, ¿cómo cambia automáticamente la barra de direcciones al título de la pregunta real?

Lo más importante es: ¿cómo lograr mostrar la URL completa sin redirigir a ninguna carpeta real? es decir, no quiero usar la redirección de header () en php a alguna carpeta.

La idea es evitar la creación de carpetas web innecesarias para cada pregunta solo por el bien de la redirección.

1
Thejas 13 feb. 2015 a las 08:18

1 respuesta

La mejor respuesta

Es menos mágico de lo que imagina. Cada publicación tiene un slug asociado en la base de datos donde se almacena (o ese slug se genera sobre la marcha, no importa). Sin embargo, solo la identificación numérica es realmente importante cuando se recupera de la base de datos. Después de eso, es una simple verificación (en pseudocódigo):

$question = getFromDatabase($_GET['id']);
if ($question['slug'] != $_GET['slug']) {
    header("Location: /questions/$question[id]/$question[slug]", true, 301);
}

Nada más y nada menos.

Esto solo se hace con fines de SEO, por lo que la URL siempre contiene el título de la pregunta en su forma actual y para mantener esa URL canónica.

1
deceze 13 feb. 2015 a las 05:23