Rewrite: eliminar la ID de los artículos de WordPress y crear una redirección permanente en Nginx

Nginx (rewrite) Remover ID en Wordpress

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.

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


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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *