nginx 重写排除包含字符串的 url

nginx 重写排除包含字符串的 url

我想从所有 URL 中删除分页,但包含 /page/[0-9] 的 URL 除外

例子

删除分页:

https://www.example.com/some/thing/here/2/
https://www.example.com/some/thing/here/3/
https://www.example.com/some/thing/here/4/

这些将被重定向到

https://www.example.com/some/thing/here/
https://www.example.com/some/thing/here/
https://www.example.com/some/thing/here/

我们目前正在使用:

rewrite ^(.*/)[0-9]+/?$ $1 permanent;

效果很好,但如果 URL 包含如下页面,我们希望排除重定向:

https://www.example.com/page/2/?s=somesearch
https://www.example.com/page/3/?s=somesearch
https://www.example.com/page/4/?s=addition

尝试了几次,例如:

rewrite ^(.*/)(?!page/[0-9]+)[0-9]+/?$ $1 permanent;

我是否需要在这里将“if”与位置块一起使用?

答案1

我不知道 nginx 是否支持负向前瞻,因此我建议使用类似以下内容:

rewrite  ^(/([^p]|p([^a]|a([^g]|g([^e]|e[^/])))).*/)[0-9]+/?$ $1 permanent;

它基本上匹配每一个不以开头的“分页”请求(比如你的例子)page/

相关内容