我正在使用Codeigniter 4创建一个项目。除了对“Controllers/api”子文件夹中的控制器的调用之外,一切都正常。
安装Rocky Linux 8.7版(绿色黑曜石)的服务器。Apache Php 8.1
php控制器的url是https://test.myweb.com/api/usr,即/home/test/public_html/app/控制器/api/Usr. php
我尝试使用“curl”获取Usr.php的任何方法的内容,例如“login”:但是我总是得到404。
我尝试在system/Config/Routes.php中放入以下代码行:
$routes->resource('api/usr');
$route['api'] = 'api';
But I always get a 404.
我也尝试过在app/Config/Routes.php中:
$route['api/(:any)'] = 'api\$1';
$routes->resource('App\Controllers\api');
$route['api/usr'] = 'https://test.myweb.com/api/Usr';
$route['api/([^/]+)'] = 'api/usr/$1';
没有结果。这是.htaccess:
RewriteEngine On
#Deny Access
RewriteRule "^(.*/)?\.gitignore" - [F,L]
RewriteRule "^(.*/)?\_sql/" - [F,L]
RewriteRule "^(.*/)?doc-project/" - [F,L]
RewriteRule "^(.*/)?\.git/" - [F,L]
RewriteRule "^(.*/)?README.md" - [F,L]
#Force HTTPS
RewriteCond %{HTTPS} off
RewriteCond %{SERVER_ADDR} !=127.0.0.1
RewriteCond %{SERVER_ADDR} !=::1
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteRule ^(.*)$ index.php?/ [L]
RewriteCond $1 !^(index\.php|images|php|script|styles|js|css)
<IfModule mod_rewrite.c>
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
</IfModule>
知道吗?谢谢。
1条答案
按热度按时间mrphzbgm1#
在CodeIgniter 4中,我们不修改文件
system/Config/Routes.php
,因为它是CodeIgniter 4核心框架的一部分。在那里所做的任何更改都可能在框架升级后被覆盖。您应该改为在文件中添加自定义路由定义:app/Config/Routes.php
.代码触发器4:设置路由规则
其次,您似乎将CodeIgniter v3与CodeIgniter v4路由定义/规则语法混合在一起。例如:
从3.x升级到4.x /升级路由
| 编号|CI第3版|CI第4版|
| - -|- -|- -|
| 路由文件路径| * 应用程序/配置/路由.php*|* 应用程序/配置/路由.php*|
| 路由规则|
$route['api/usr/login']['GET'] = 'api/usr/login';
|$routes->get('api/usr/login', '\App\Controllers\api\Usr::login');
|| 控制器路径| * 应用程序/控制器/api/Usr.php*|* 应用程序/控制器/api/Usr.php*|
附录
在CodeIgniter 4中,不要忘记禁用自动路由。即: