Nginx 配置 URL 中带有语言代码的位置正则表达式

Nginx 配置 URL 中带有语言代码的位置正则表达式

尝试使用 nginx 正则表达式位置配置在 url 的第一个段中实现常量语言代码,但找不到正确的语法。

必要结果:

  • 示例.com停留示例.com
  • example.com/en停留example.com/en
  • example.com/en/停留example.com/en或者example.com/en/ (无所谓)
  • example.com/en/etc停留example.com/en/etc


  • example.com/etc更改为example.com/en/etc
  • example.com/etc/segment更改为example.com/en/etc/segment

目前我已经找到了此代码,但它仍然卡在某个地方。它会产生永久循环,并且不使用 $1 参数。

location ~ "^/(?![a-z]{2}/)(.+)$" {
    rewrite / /en/$1 permanent;
}

#Using handler here for removing index.php in uri (example.com/index.php -> example.com);
location / {
    index index.htm index.html index.php;
    try_files $uri $uri/ @handler;
}

location @handler {
    rewrite / /index.php?$query_string;
}



更新: 答案可以在这个问题中找到:https://stackoverflow.com/a/33913261/2662849

答案1

@handler位置将重写 URI,/index.php然后重定向到/en/index.php,如果不存在则调用该@handler位置。

这个文件因为您需要一些东西来处理 PHP。重定向循环是由于文件或处理程序不存在而引起的。您需要定义一个位置来处理 PHP 文件,可以是另一个正则表达式位置或您命名的位置。

相关内容