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