Wikired, se inicio con la construcción de sus URL basada en el ID del artículo más el slug o parte amigable de la dirección. Bueno, tome la decisión de ir hacia atrás y eliminar la ID de la URL. Como ya había indexadas algunas páginas y algunos enlaces entrantes, necesitaba crear una rule de re-escritura (rewrite) para Nginx, sencilla y eficaz.
Contenidos
Las urls ya indexadas que necesitaba reescribir era del tipo:
/85-titulo-del-post /96-titulo-de-otro-post /ID-slug
Y necesitaba convertirlas a
/titulo-del-post /titulo-de-otro-post /slug
Estaba claro que no había ninguna que pudiera tener duplicada el mismo slug, por lo que se trataba de eliminar el ID numérico de la url.
Para ello que mejor que usar una buena regla regex.
location ~ /([0-9]+)-(.+) {
return 301 https://$server_name/$2;
}
Nginx usa expresiones regulares con la sintaxis de Perl para las reescrituras, y esto suele asustar a más de uno.
Tambien existen tres directivas implicadas que funcionan de forma distinta: return, rewrite y try_files.
Las dos primeras son las usadas para la reescritura en general, y try_files,es la que se usa para dirigir las solicitudes a los servidores de aplicaciones como PHP.
Es la más simple y la más recomendada, en lugar de la rescritura, siempre que sea posible. Incluye la devolución en un server
o un contexto de ubicación que especifica las URL que se deben volver a escribir y define la URL corregida (reescrita) que el cliente utilizará en futuras solicitudes del recurso.
server { listen 80; listen 443 ssl; server_name www.nombre-antiguo.es; return 301 $scheme://www.nombre-nuevo.es$request_uri; }
Algunos blog de gurús indican que para este caso usan un rewrite que no esta recomendado por la gente de Nginx.
# NOT RECOMMENDED rewrite ^ $scheme://www.new-name.com$request_uri permanent;
Si necesitamos probar distinciones más complicadas entre URL, capturar elementos de la URL original, cambiar o agregar elementos de la ruta, podemos utilizar la directiva rewrite
Al igual que la directiva de devolución (return) es aconsejable aplicarla en un contexto de servidor (server) o de ubicación (locate). Su sintaxis es muy sencilla, siendo el regex, el contenido que Nginx rescribirá, sólo si coincide con la expresión regular (además de coincidir con la directiva server o ubicación)
rewrite regex URL [ flag ];
Hay otra diferencia, y es que esta directiva sólo puede devolver el código 301 ó 302. Para devolver otros debemos incluir una directiva de devolución después de la directiva de reescritura.
Por último, la directiva rewrite no finaliza el procesamiento de Nginx de la petición como la directiva return, y no envía necesariamente una redirección al cliente. A menos que especifiquemos lo que queremos que haga Nginx, buscará otras opciones del módulo de reescritura (break, if, return, rewrite). Esta opción de persé, es bastante mas complicada y requiere mas trabajo, aunque su potencia es increíble.
Imagen de portada Designed by Freepik y retocada por Abdelkarim Mateos
Comparte este artículo
Comparte este articulo en
¡Hola a todos! Vamos a sumergirnos en el fascinante mundo de Mod Security y aprender…
Ya son muchos años en el sector, muchos años pasando por varios paneles de control,…
La lista UCEPROTECT es una herramienta utilizada por muchos administradores de sistemas y proveedores de…
No es la primera vez que me encuentro con el agotamiento de la memoria en…
Descubre cómo solucionar problemas de acceso a servidores con Centos 7, Almalinux 8, Ubuntu 20.04…
Uno de los mensajes más alarmantes que puedes encontrarte es aquel que indica que tu…