Skip to content

Busca e permalinks

Contei hai un tempo que Twitter engade un pernicioso ?s=09 ao final dos permalinks cando a xente partilla unha ligazón ao blogue desde a súa app de Android. Outras plataformas teñen outros números. E iso, de algún xeito, rompe WordPress.

Tentei fedellar con iso e mesmo dera con unha solución que retiraba o tal parámetro de calquera visita ao blogue. Porén, xustamente xustamente, s é o parámetro que usa WordPress para xestionar as buscas internamente. E con xa 700+ entradas no blogue, comezaba a botar en falla ter busca.

Así que dei voltas e voltas a configuracións varias de nginx para arranxar esta desfeita. Topei con erros moi raros, principalmente do propio nginx, e finalmente isto foi o que me funcionou e teño posto.

O truco é que as buscas de WordPress van contra a raíz do blogue, por exemplo: https://xurxodiz.eu/?s=magic, polo que podemos dividir a location por defecto en dúas. Unha ocúpase exactamente da raíz e deixa pasar a query como é: aí entraría a busca. A outra colle o resto de queries a outros enderezos e retíralles o parámetro s para logo as enviar a reprocesar cun redirect : aí entrarían as ligazóns desde Twitter. Así:

location = / {
    try_files $uri $uri/ /index.php?$args;
}

location / {
    if ($args ~ (.*)(^|&)s(?:=[^&]*)?(\2|$)&?(.*)) {
        set $args $1$3$4;
        rewrite ^(.*)$ $1 redirect;
    }
    try_files $uri $uri/ /index.php?$args;
}

Como vedes facemos un pequeno truquiño de rewrite sen mudarmos nada para o redirect. E que necesidade hai do redirect logo? A min non me mires: nginx rompe se non o reinxectas, devolve 404 desde o servidor. Se alguén se decatar da causa que mo diga.

Só quedaría un problema: se alguén liga desde Twitter a unha busca do blogue, o parámetro 09 de Twitter sobreescribiría a propia busca do blogue. Iso xa é cousa de Twitter e eu máis non podo facer.

Listo pois. Tedes o cadro de busca na barra lateral. Buscade con compaixón.

Editado: ollo, que con isto non funcionarían os resultados de busca de máis de unha páxina, xa que van a https://xurxodiz.eu/page/2/?s=magic. Cómpre engadir mais outra cláusula ao exemplo de enriba. Quedaría así (a nova descuberta en negriña):

location = / {
    try_files $uri $uri/ /index.php?$args;
}

location /page/ {
    try_files $uri $uri/ /index.php?$args;
}

location / {
    if ($args ~ (.*)(^|&)s(?:=[^&]*)?(\2|$)&?(.*)) {
        set $args $1$3$4;
        rewrite ^(.*)$ $1 redirect;
    }
    try_files $uri $uri/ /index.php?$args;
}

Podes interaxir con esta entrada de moitas formas: con pingbacks, con webmentions ou simplemente respondendo a través do Fediverso, por exemplo visitándela en Mastodon.