Когда я перехожу к /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.
Я даже не попадаю в метод view, где я пробовалчтобы что-то повторить.
Мне нужен последний сегмент кода, поскольку мне нужно передать его в мою модель для дальнейшей обработки.
Также было бы неплохо узнать, как настроитьмаршрутизация для избавления от части 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. Мой был в подпапке с именем Controllers / main, и файл маршрутов был настроен соответствующим образом. Так что этот код не работает с подпапкой, что плохо, если мы хотим сохранить наш код организованным. Так что я бы приветствовал решения. Спасибо.