Nginx多重根重定向问题

时间:2017-09-02 17:20:03

标签: redirect nginx location

我的以下配置效果很好:

root /var/www/en;
location / {
   try_files $uri $uri/ /index.php?$args;
}

location /admin {
   try_files $uri $uri/ /admin/index.php;
}

location ~ \.php(/|\?|$) {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME 
        $document_root$fastcgi_script_name;
        fastcgi_param COCKPIT_URL_REWRITE On;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        fastcgi_index index.php;
}

这会将所有请求重定向到index.php,并将管理员后端重定向到admin / index.php。 现在我需要将网站的副本以不同的语言放到子目录中,该子目录具有相同的子目录重定向规则。这实际上是一个单独的项目,具有单独的根文件夹。我是按照以下方式做的:

location ~ ^/de {
   root /var/www/de;
   try_files $uri $uri/ /de/index.php?$args;
}


location ~ ^/de/admin {
   root /var/www/de;
   try_files $uri $uri/ /de/admin/index.phpd;
}

但是,这会导致以下nginx错误:

rewrite or internal redirection cycle while internally redirecting to "/de/index.php"

如何解决这个问题?

谢谢;)

更新:

我设法通过将root更改为alias来获取静态文件。所以,现在我可以访问静态文件site.com/de/test.txt。但是,当我尝试访问site.com/de/ php处理程序无法正常工作时,浏览器会尝试下载php文件。我把php处理程序放在新的位置块中,但它仍然无效。

1 个答案:

答案 0 :(得分:0)

试试这个

location ~ \.php(/|\?|$) {

  location /de {
     root /var/www/de;
     try_files $uri $uri/ /de/index.php?$args;
  }

  location /de/admin {
     root /var/www/de;
     try_files $uri $uri/ /de/admin/index.php;
  }

  include fastcgi_params;
  fastcgi_param SCRIPT_FILENAME 
  $document_root$fastcgi_script_name;
  fastcgi_param COCKPIT_URL_REWRITE On;
  fastcgi_split_path_info ^(.+\.php)(/.+)$;
  fastcgi_pass unix:/run/php/php7.0-fpm.sock;
  fastcgi_index index.php;
}