先把当时的情况摆出来。用户搜 「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 一周内归零,搜索结果页的跳出率也降了一截。
容易忽略的是,关键词里的斜杠、问号、井号都要编码,前端自己拼地址是最容易漏的一环,交给编码函数就别手写。这类问题最好一次改到位,反复小改反而容易把原因搅混。
