Nginx + Wordpress 语言重定向

Nginx + Wordpress 语言重定向

我目前正在尝试配置 Nginx 安装并使用 Wordpress 多站点来提供语言支持。

多站点配置: mysite.com (未使用) mysite.com/it mysite.com/en

基本上我想添加默认语言,如果找到英语就重定向。该站点实际上是在 Apache 安装上,因此我们使用:

RewriteCond %{HTTP:Accept-Language} ^en [NC]
RewriteRule ^$ /en/ [L,R=301]

RewriteRule ^$ /it/ [L,R=301]

进行实际的重定向。

我尝试使用 nginx 复制该代码,但没有任何效果。到目前为止,我添加了:

map $http_accept_language $lang {
    default it;
    ~en en;
}

server {

 listen       80;
 server_name  mysite.com;
 access_log  /var/log/nginx/logs/mysite-access.log ;
 error_log /var/log/nginx/logs/mysite-error.log ;

 location / {
    root   /var/www/html/mysite;
    index  index.php index.html;
    try_files $uri $uri/ /index.php?$args;
    rewrite ^ /$lang/ permanent;
 }    

#Other rules used by wordpress and plugins
}

这会导致“页面未正确重定向”错误。

关于如何解决这个问题有什么建议吗?

谢谢。

答案1

这里有一个问题:

    rewrite ^ /$lang/ permanent;

您正在重写每一个请求,而不仅仅是对主页的请求,因为每一个请求有一个开始。

至少有两种方法可以解决此问题。您可以使用以下任一方法:

  1. 仅重写针对主页的请求。

    rewrite ^/$ /$lang/ permanent;
    
  2. 使用location仅匹配主页的特定内容:

    location = / {
        return 301 /$lang/;
    }
    

相关内容