我一直在我的本地机器上使用Codeigniter开发一个运行Apache服务器的网站。我没有意识到生产服务器将运行Nginx。在尝试运行CI时,我现在遇到的问题是那些带有段的漂亮URL不起作用。我一直得到404页。
我没有使用过Nginx的经验,但是我尝试过通过谷歌发现的一些代码信息。
我处于共享托管状态,这意味着我的配置选项有限。这导致配置界面拒绝我复制粘贴到其中的大多数配置snippits,以试图让它工作。
到目前为止,我发现它拒绝了关键字server_name
,root
和include
,它们似乎出现在我找到的每个解决方案中。
因为我对这个主题知之甚少,所以我不确定我是否正在尝试做什么(即,使用斜杠分隔的URL部分而不是查询字符串来运行Codeigniter)我无法使用上述关键词。
是否有可用于Codeigniter的'默认'Nginx配置可以帮助我在这里?或者我的情况是否太有限,甚至不允许解决方案?我应该向主人寻求帮助吗?
编辑:请注意,我并不是想从我的网址中删除index.php以使其更具吸引力 - 我还没有达到这一点。这是关于一般的URL段 - 您知道,Codeigniter的默认行为。
答案 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支持“请更改配置,以便重写可以开始工作”