我的以下配置效果很好:
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处理程序放在新的位置块中,但它仍然无效。
答案 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;
}