重写 nginx 和 Codeigniter 的规则

rewrite rules for nginx and Codeigniter

我已经在 codeigniter 中实现了一个 php 应用程序,现在想将它部署到 nginx 服务器上。在部署之前,我使用 MAMP 服务器检查了本地主机上的 nignx 配置。它工作正常。但是,此配置不适用于实时服务器。作为nginx的初学者,我不明白这里的错误在哪里。在实时服务器中,我无法在主 nginx.conf 文件中写入。我的应用程序 "abc" 有一个单独的配置文件,例如 "abc"。我所有的应用程序文件都在 "abc/xyz" 目录下。这是我的示例配置,

location /abc {
root /srv/www/htdocs/apps/;

index index.html index.htm index.php;


location /xyz {
    try_files $uri $uri/ /abc/xyz/index.php;
}

location ~ \.php(\/(\w+))*$ {
    try_files $uri =404;
    rewrite (.+)\.php(\/(\w+))*$ .php break;

    include /etc/nginx/fastcgi_params;

    fastcgi_index index.php;
    fastcgi_pass unix:/var/run/php-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

}

在这里,我可以看到我的欢迎页面 https://myapplication/abc/xyz. But if I want to navigate other pages like https://myapplication/abc/xyz/other_pages,它显示“找不到 404 页面”。我已经检查了其他解决方案,但其中 none 在这种情况下不起作用。在此先感谢您的帮助!

location /xyz 块嵌套在 location /abc 块中。嵌套块需要处理前缀为 /abc/xyz.

的 URI

如果您的 location /abc 块周围还有其他 正则表达式 location, you should use the^~` 修饰符。

例如:

location ^~ /abc {
    ...
    location /abc/xyz {
        ...
    }
    ...
}

有关更多信息,请参阅 this document

抱歉回答晚了。这实际上是一个非常愚蠢的错误。我的控制器页面名称是小字符。这就是它不起作用的原因。我的配置没问题。控制器页面的第一个字母应该是大写字符。例如,我的控制器名称是 Home。所以我的 php 文件名必须是 Home.php 而不是 home.php.