Nginx上的Codeigniter,url段

时间:2013-08-22 19:33:11

标签: php codeigniter nginx

我一直在我的本地机器上使用Codeigniter开发一个运行Apache服务器的网站。我没有意识到生产服务器将运行Nginx。在尝试运行CI时,我现在遇到的问题是那些带有段的漂亮URL不起作用。我一直得到404页。

我没有使用过Nginx的经验,但是我尝试过通过谷歌发现的一些代码信息。

我处于共享托管状态,这意味着我的配置选项有限。这导致配置界面拒绝我复制粘贴到其中的大多数配置snippits,以试图让它工作。

到目前为止,我发现它拒绝了关键字server_namerootinclude,它们似乎出现在我找到的每个解决方案中。

因为我对这个主题知之甚少,所以我不确定我是否正在尝试做什么(即,使用斜杠分隔的URL部分而不是查询字符串来运行Codeigniter)我无法使用上述关键词。

是否有可用于Codeigniter的'默认'Nginx配置可以帮助我在这里?或者我的情况是否太有限,甚至不允许解决方案?我应该向主人寻求帮助吗?

编辑:请注意,我并不是想从我的网址中删除index.php以使其更具吸引力 - 我还没有达到这一点。这是关于一般的URL段 - 您知道,Codeigniter的默认行为。

1 个答案:

答案 0 :(得分:2)

然后你说“斜杠分隔的网址”,你必须明白,这只是一些网址,导致不存在的文件(例如,site.com/controller/action/param1/value1导致“文件夹” “/ controller / action / param1和”file“value1),这种情况通过在apache中使用mod_rewrite来解决 - 它只是重写任何URL,指向不存在的文件到url,指向index.php。所以,在nginx中你需要同样的东西。

在您的nginx配置中,您必须添加以下位置:

# for rewriting non-existing url-s to index.php
location / {
    try_files $uri $uri/ /index.php?$args;
}

#location, that enables to process *.php files thorugh php-fpm (fastcgi)
#it's possible that you already have this block configured, and don't need to change it.
location ~ \.php$ {
    try_files $uri =404;        
    fastcgi_pass 127.0.0.1:9999;
    fastcgi_index index.php;        include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    fastcgi_ignore_client_abort off;
}

此外,如果它没有帮助,只需谷歌“为codeigniter配置nginx”,或者,请询问您的webhoster支持“请更改配置,以便重写可以开始工作”