Ngnix 重定向多级子目录

Ngnix 重定向多级子目录

我的 URL 结构如下:

xyz/asset.html
abc/test.html
xyz/abc/test.html
xyz/abc/qwerty/test2.html

我想重定向:

xyz/asset.html to xyz/asset

xyz/abc/test.html to xyz/abc/test

xyz/abc/qwerty/test2.html to xyz/abc/qwerty/test2

目前我在我的 ngnix 配置中有这个重定向规则,它适用于第一级目录重定向:

location ~ ^/(xyz|abc).html { return 301 /$1; }

这适用于第一级直接访问,但不适用于子目录。如何实现?谢谢帮助。

答案1

有多种方法可以解决这个问题。以下是其中一种方法...

第一步是捕获 URI 中需要重写的部分。然后,我们可以使用块location或使用rewrite条件进行重定向。

使用location块与named capture...

location ~ ^/(?<variable>[/a-zA-Z0-9]+)\.html$ { return 301 /$variable; }

或者

location ~ ^/([/a-zA-Z0-9]+)\.html$ { return 301 /$1; }

使用rewrite...

rewrite ^/(?'custom_url'[/a-zA-Z0-9]+)\.html$ /$custom_url permanent;

Nginx 支持named captures使用以下语法:

?<name>     Perl 5.10 compatible syntax, supported since PCRE-7.0
?'name'     Perl 5.10 compatible syntax, supported since PCRE-7.0
?P<name>    Python compatible syntax, supported since PCRE-4.0

参考:https://nginx.org/en/docs/http/server_names.html(在标题下正则表达式名称)。

相关内容