重写 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.
我已经在 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
.
如果您的 location /abc
块周围还有其他 正则表达式 location
块, you should use the
^~` 修饰符。
例如:
location ^~ /abc {
...
location /abc/xyz {
...
}
...
}
有关更多信息,请参阅 this document。
抱歉回答晚了。这实际上是一个非常愚蠢的错误。我的控制器页面名称是小字符。这就是它不起作用的原因。我的配置没问题。控制器页面的第一个字母应该是大写字符。例如,我的控制器名称是 Home。所以我的 php 文件名必须是 Home.php 而不是 home.php.