Когда я перехожу к /public/index.php/main/anything, я получаю эту ошибку:
404 Controller or its method is not found: {0}::{1}
У меня есть проект codeigniter 4, основанный на примере в документации (https://codeigniter4.github.io/userguide/tutorial/news_section.html)
Я добавил эти 3 маршрута:
$routes->get('main/(:any)','main/Main::view/$1');
$routes->get('main', 'main/Main::index');
$routes->get('/', 'Home::index');
остальные настройки здесь:
$routes->setDefaultNamespace('App\Controllers');
$routes->setDefaultController('Home');
$routes->setDefaultMethod('index');
$routes->setTranslateURIDashes(false);
$routes->set404Override();
$routes->setAutoRoute(true);
Когда я перехожу к /public/index.php/main, я получаю хорошие результаты индекса.
Я пытался:
main/Main::view
без передачи $ 1, и он отлично работает.
Однако, как только я добавляю $1, я получаю указанную выше ошибку 404. Я также пробовал с :segment
тот же результат: ошибка 404.
Я даже не попал в метод просмотра, где я пытался что-то повторить.
Мне нужен последний сегмент кода, так как мне нужно передать его моей модели для дальнейшей обработки.
Также было бы неплохо узнать, как настроить маршрутизацию, чтобы избавиться от части public/index.php, не создавая проблем с безопасностью.
Файл public/.htaccess выглядит так:
Options All -Indexes
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
RewriteRule ^(.*)/$ /$1 [L,R=301]
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>
<IfModule !mod_rewrite.c>
ErrorDocument 404 index.php
</IfModule>
ServerSignature Off
<Files ~ "\.(env|json|config.js|md|gitignore|gitattributes|lock)$">
Order allow,deny
Deny from all
</Files>
ОБНОВЛЕНИЕ: я воссоздал демонстрационный проект, и вышеизложенное работает, пока файл Main.php находится в папке «Контроллеры». Мой находился в подпапке Controllers/main, и файл маршрутов был настроен соответствующим образом. Таким образом, этот код не работает с подпапкой, что плохо, если мы хотим сохранить наш код организованным. Так что я приветствую решения. Спасибо.
php $routes->get('main', 'main/Main::index'); $routes->get('main/(:any)','main/Main::view/$1');
- person Nathanael   schedule 23.10.2019