$ 1 в маршрутизации возвращает ошибку 404 вместо передачи сегмента URL методу контроллера - PullRequest
0 голосов
/ 23 октября 2019

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

...