Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Nginx上的Codeigniter,url段_Php_Codeigniter_Nginx - Fatal编程技术网

Php Nginx上的Codeigniter,url段

Php Nginx上的Codeigniter,url段,php,codeigniter,nginx,Php,Codeigniter,Nginx,我一直在用本地机器上的Codeigniter开发一个网站,运行Apache服务器。我没有意识到生产服务器将运行Nginx。在尝试运行CI时,我现在遇到了一个问题,即那些带有段的漂亮URL无法工作。我一直得到404页 我没有使用Nginx的经验,但我通过谷歌找到了一些我尝试过的代码片段 我处于共享托管状态,这意味着我的配置选项有限。这导致配置界面拒绝了我复制粘贴到其中的大多数配置snippits,以使其正常工作 到目前为止,我发现它拒绝使用关键字server\u name、root和include

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

我没有使用Nginx的经验,但我通过谷歌找到了一些我尝试过的代码片段

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

到目前为止,我发现它拒绝使用关键字
server\u name
root
include
,这似乎出现在我找到的每个解决方案中

由于我对这个主题知之甚少,所以我不确定当我无法使用指定的关键字时,我想做的事情(即启动Codeigniter并使用斜杠分隔的URL部分而不是查询字符串运行)是否可行

对于Codeigniter,是否有一个“默认”的Nginx配置可以帮助我解决这个问题?还是我的处境太有限,甚至无法找到解决方案?我应该向主人寻求帮助吗

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

然后你说“斜线分隔URL”,你必须理解,它只是一些URL,导致不存在的文件(例如,site.com/controller/action/param1/value1导致“文件夹”//controller/action/param1和“文件”value1),这种情况是通过在apache中使用mod_rewrite解决的——它只是将指向不存在文件的任何URL重写为指向index.php的URL。因此,在nginx中,您也需要同样的功能

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

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


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

这正是我整晚都在寻找的配置,但是我的主机提供的输入字段不允许在第二个snippit的第6行使用
include
语句。我想我会问他们为什么。你必须问你的主机的技术支持。这是一个非常简单且广泛使用的配置,因此,如果您的主机不允许您手动设置,他们应该手动完成。“隐藏index.php”和“一般url段”-实际上是相同的任务-需要启用重写选项。我不同意。在上,它表示默认情况下包含index.php,并提供了一个重写来修复此问题。URI段是默认功能,无需重写。这似乎是两种不同的情况。
#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;
}