1

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

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

我处于共享托管情况,这意味着我的配置选项有限。这会导致配置界面拒绝我复制粘贴到其中的大部分配置片段,以使其正常工作。

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

由于我对这个主题知之甚少,我不确定我正在尝试做的事情(即启动 Codeigniter 并使用斜杠分隔的 URL 部分而不是查询字符串运行)即使我无法做到使用上述关键字。

Codeigniter 是否有一个“默认”的 Nginx 配置可以帮助我?还是我的情况太有限,甚至无法解决?我应该向我的主人寻求帮助吗?

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

4

1 回答 1

2

然后你说“Slash-separated URLs”,你必须明白,它只是一些 URL,它导致不存在的文件(例如,site.com/controller/action/param1/value1 导致“文件夹”/controller /action/param1 和 "file" 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;
}

#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 支持“请更改配置,以便 url 重写可以开始工作”

于 2013-08-22T19:53:10.863 回答