CodeIgniter在Nginx上调用/index.php而不是/basefolder/index.php?

时间:2016-05-12 19:21:15

标签: php codeigniter nginx

我在Nginx服务器中运行CodeIgniter 3.0.6,子路径最终服务于/index.php,而不是/<installdir>/index.php。因此,如果我要求/CodeIgniter-3.0.6/home/,我会按照/index.php页面而不是/CodeIgniter-3.0.6/index.php按预期提供服务。请注意,我的CodeIgniter应用程序最终将驻留在/2016/

我怀疑这是由于我的Nginx安装配置错误,而不是CodeIgniter相关的东西?我的Nginx安装在Ubuntu 16.04上运行。 / etc / nginx / sites-enabled / default的内容为:

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

location ~ \.php$ {
    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
    include fastcgi.conf;
}

还有什么我应该改变的吗?

1 个答案:

答案 0 :(得分:0)

如果您的服务器有一个主要入口点位于/CodeIgniter-3.0.6/index.php的应用程序,您应该设置这样的位置:

location / {
    try_files $uri $uri/ /CodeIgniter-3.0.6/index.php;
}
location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
    include fastcgi.conf;
}

这样,任何与资源文件或.php文件不匹配的URI都将路由到您的应用程序默认入口点/CodeIgniter-3.0.6/index.php

但是,如果有多个应用程序,/index.php/CodeIgniter-3.0.6/index.php是两个不同的入口点,您可能需要为每个应用程序设置位置,可能是这样的:

location / {
    try_files $uri $uri/ /index.php;
}
location /CodeIgniter-3.0.6 {
    try_files $uri $uri/ /CodeIgniter-3.0.6/index.php;
}
location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
    include fastcgi.conf;
}

这样,只有以/CodeIgniter-3.0.6开头的URI才会被路由到该应用程序的默认入口点。