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
Escenario
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; }
Básico en reescritura de direcciones para Nginx
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.
Directiva return
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;
Directiva rewrite
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.
Recomendaciones
- Habitualmente uso Rubular para comprobar mis expresiones regulares.
- URL Rewriting for the fearful
- Creating nginx rewrite rules
- Rewrite nginx rule for delete ID on url
Imagen de portada Designed by Freepik y retocada por Abdelkarim Mateos
Comparte este artículo
Artículo Antiguo
Este artículo tiene más de 2 años. Es muy probable que su contenido este anticuado, aunque pueda ser de utilidad, es conveniente que revises otras informaciones al respecto. Si lo encuentras útil o crees que puede ser actualizado, deja tu comentario con la actualización para poder editarlo y que pueda ser útil a los demás.Comparte este articulo en