最近在检查本站的收录情况时,发现百度收录了很多带问号参数的首页 url,类似下面这种:
https://www.02405.com/?action=novel&id=1234
https://www.02405.com/?action=news&id=4321
实际上这些链接无任何意义、都是首页。但是这样会造成权重分散,对 seo 有负面影响,因此决定进行 url 重写。
按照以往的经验,写出了下面的 rewrite 规则:
rewrite ^/?action=(\w+)&id=(\d+)$ https://www.02405.com permanent;
再次访问发现重写规则并未生效,查了一下 nginx 文档发现,在 nginx 中 url 中如果包含问号,那么从问号后开始自动一刀切识别成$query_string
,不会对这部分再进行正则匹配了,因此导致上面的重写规则无效,那么我们判断一下$query_string
就可以了。
location /
{
if ( $query_string ~ "action=novel&id=(\d+)$" ) {
rewrite ^/ https://www.02405.com/? permanent;
}
}
再次访问重写规则正确运行,开头示例中的 url 会自动 301 跳转到首页。需要注意的是在网站后面多加了一个“?
”号,要不然会导致 too many 重定向错误。