正则表达式从 URL 中删除某些模式

正则表达式从 URL 中删除某些模式

所以我尝试过多次但都无济于事。

基本上,我想做的是检查 URL 是否具有特定的语言区域设置并将其删除,然后执行 301 重定向到不带区域设置的父 URL。例如,我有...

www.domain.com/mx/en-us/product/asset/23456768
www.domain.com/de/en-gb/product/asset/34565768
www.domain.com/ar/en-us/product/asset/34567788
www.domain.com/ar/en-us/affiliates

我想删除的模式是/en-us或者/en-gb。因此新的 URL 看起来会像这样...

www.domain.com/mx/product/asset/23456768
www.domain.com/de/product/asset/34565768
www.domain.com/ar/product/asset/34567788
www.domain.com/ar/affiliates

我有这个,但它在 NGINX 中不起作用

server {
    rewrite ^/en-us(.*)$ $1 last;
    rewrite ^/en-gb(.*)$ $1 last;
    return 301;
  }

我是不是漏掉了什么?我不应该使用重写吗?这也可以一行完成吗?

答案1

如果所有 URI 都符合您给出的模式(语言环境部分之前有两个字母的前缀):

rewrite "^(/\w{2})/en-(?:us|gb)(/.*)" $1$2 permanent;

(由于使用了花括号,因此正则表达式模式应该用引号引起来)

如果这样的前缀长度可以变化:

rewrite ^(/\w+)/en-(?:us|gb)(/.*) $1$2 permanent;

要在任何地方匹配语言环境部分:

rewrite ^(.*)/en-(?:us|gb)/(.*) $1/$2 permanent;

相关内容