先把当时的情况摆出来。用户搜 「nginx/tomcat 区别」,关键词里的斜杠原样进了地址,Nginx 当成目录路径,直接回 404。百度把这些地址当死链记了一大批。

这类报错背后常见的原因有几处,逐个排除就行。搜索参数没做编码,斜杠被当成路径分隔符。另一种情况是try_files 把不存在的路径直接交给 404,没有转给搜索入口。

另外,表单用 GET 提交但没对关键词做 urlencode。少数情况下是站内链接是字符串拼接出来的,特殊字符完全没转义。

复现带斜杠的搜索地址

curl -sI 'https://www.lu0.cn/search/nginx/tomcat' | head -1

给关键词做完整编码再拼地址

encodeURIComponent('nginx/tomcat')

然后把搜索前缀统一转到搜索入口

location ^~ /search/ { rewrite ^/search/(.*)$ /search?q=$1 last; }

等前面都确认过,再统计 404 里带搜索特征的地址量

awk '$9==404 {print $7}' access.log | grep -c '/search/'

别只看报错消失,验证要多做一步。带斜杠的关键词能正常出结果,相关 404 一周内归零,搜索结果页的跳出率也降了一截。

容易忽略的是,关键词里的斜杠、问号、井号都要编码,前端自己拼地址是最容易漏的一环,交给编码函数就别手写。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189