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.