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:

Y necesitaba convertirlas a

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.

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.

Algunos blog de gurús indican que para este caso usan un rewrite que no esta recomendado por la gente de Nginx.

 

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)

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

Deja un comentario

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

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax