上面的规则完整的匹配了99%的链接,配置的 Nginx 重定向规则中,只匹配了 URL 的“完全等价”路径,但未考虑末尾是否带有斜杠(/)的问题。但存在一些细微的缺陷:
✅ /forums/topic/12345 能跳转
❌ /forums/topic/12345/ 无法跳转
1、解释:
([0-9]+) 匹配 topic ID
/? 匹配 可选的斜杠
$ 保证路径匹配结束
2、如果还有 query 参数也想保留(比如 ?sort=asc),这样 ?xxx=yyy 会跟随跳转。
location ~ ^/forums/topic/([0-9]+)/?$ {
return 301 /topic/$1;
}
location ~ ^/forums/forum/([0-9]+)/?$ {
return 301 /forum/$1;
}
location ~ ^/forums/users/(.+)/?$ {
return 301 /users/$1;
}
location ~ ^/forums/members/(.+)/?$ {
return 301 /members/$1;
}
location ~ ^/forums/reply/([0-9]+)/?$ {
return 301 /reply/$1;
}