所以我尝试过多次但都无济于事。
基本上,我想做的是检查 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;