Я создаю проект с помощью Codeigniter 4. Все работает нормально, за исключением вызовов контроллеров в подпапке «Controllers/api».
Сервер с Rocky Linux версии 8.7 (Green Obsidian) ID_LIKE="rhel centos fedora". Апач Php 8.1
URL-адрес контроллера Usr.php: https://test.myweb.com/api/usr, то есть /home/test/public_html/app/Controllers/api/Usr.php
Я пытаюсь увидеть содержимое любого из методов Usr.php, но это не работает. Ответ: «404 — файл не найден. HTTP.controllerNotFound"
Я попытался добавить в 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';
$routes->get('api/usr', '\App\Controllers\api\Usr');
Без результатов. Это Usr.php:
<?php
namespace App\Controllers\Api;
use CodeIgniter\Controller;
class Usr extends Controller {
public function index(){
echo "OK INDEX";die;
}
}
Это .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>
Есть идеи? Спасибо.
Спасибо. Я сократил тест до максимума, отредактировал вопрос. Я последовал вашему совету, но он все еще не работает.
@Telerin Пожалуйста, избегайте изменения вопроса таким образом, чтобы сделать недействительными уже существующие ответы. Вопросы не должны быть движущимися мишенями. Если вы столкнулись с совершенно другой проблемой, изучите ее, запросите разъяснения в комментариях или задайте новый вопрос.
В CodeIgniter 4 мы не изменяем файл system/Config/Routes.php
, так как он является частью ядра CodeIgniter 4. Любые внесенные там изменения, скорее всего, будут переопределены после обновления фреймворка. Вместо этого вы должны добавить свои собственные определения маршрутов в файл: app/Config/Routes.php
.
CodeIgniter 4: Настройка правил маршрутизации
Во-вторых, вы, кажется, смешиваете CodeIgniter v3 с синтаксисом определения/правила маршрута CodeIgniter v4. То есть:
Обновление с 3.x до 4.x / Upgrade Routing
test.myweb.com/api/usr/логин
$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 не забудьте отключить автомаршрутизацию. То есть:
приложение/Конфигурация/Routes.php
// ...
$routes->setAutoRoute(false);
// ...
Хорошо, на маршрутах я использовал C3. попробую и прокомментирую.
Я установил $routes->setAutoRoute(true). Если я установлю для него значение false, должен ли я также указать все пути для всех контроллеров, системы, представлений, моделей и т. д.? Спасибо
Важно: я отредактировал вопрос.
Сначала попробуйте заставить его работать в браузере - это исключит проблемы с Curl и другие проблемы. Убедитесь также, что бит Usr в URL-адресе не чувствителен к регистру, так как иногда это может быть проблемой.