2013-08-22 31 views
0

我一直在我的本地机器上开发一个Codeigniter网站,运行Apache服务器。我没有意识到生产服务器将运行Nginx。当试图运行配置项时,我现在遇到这样的问题:那些带有段的漂亮URL不起作用。我不断收到一个404页面。Nginx CodeGo.net,URL段

我对Nginx没有任何经验,但是我通过Google发现了一些我试过的代码snippits。

我处于共享宿主状态,这意味着我的配置选项有限。这会导致配置界面拒绝大部分我复制粘贴到其中的配置信息,试图使其运行。

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

因为我对这个主题知之甚少,所以我不知道我试图做什么(即,使用斜杠分隔的URL部件而不是查询字符串启动并运行Codeigniter)甚至可能在我不能使用前面提到的关键词。

是否有可用于Codeigniter的'默认'Nginx配置可能帮助我在这里?或者我的情况太局限了,甚至无法提供解决方案?我应该问我的主人帮忙吗?

编辑:请注意,我没有试图从我的URL中删除index.php,使他们更具吸引力 - 我还没有在那一点。这是关于一般URL段的 - 你知道,Codeigniter的默认行为。

+0

“隐藏index.php”和“一般url地址段” - 实际上是相同的任务 - 需要启用重写选项。 – MihanEntalpo

+0

我不同意。在http://ellislab.com/codeigniter/user-guide/general/urls.html上,它说默认情况下它包含index.php,并提供重写来解决这个问题。 URI段是不重写的默认功能。这似乎是两种不同的情况。 – Joost

回答

2

然后你说“以斜杠分隔的URL”,你必须明白,它只是一些URL,导致不存在的文件(例如,site.com/controller/action/param1/value1导致“文件夹“/控制器/动作/参数1和”文件“值1),tghis的情况是通过在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; 
} 

而且,如果没有帮助,只是谷歌 “为笨配置nginx的”,或者,请问您的webhoster支持“请更改配置,以便url重写可以开始工作”

+0

这正是我一直都在找的配置,但是我的主机提供的输入字段不允许第二个snippit的第6行包含'include'语句。我想问他们为什么。 – Joost

+0

你必须问你的主机的技术支持。这是一个非常简单和广泛使用的配置,因此,如果您的主机不能手动设置,他们应该手动完成。 – MihanEntalpo