Почему браузер показывает представление 404 вместо загрузки таблицы стилей в этом приложении Codeigniter 3?

#php #codeigniter #codeigniter-3

#php #codeigniter #codeigniter-3

Вопрос:

Я работаю над CMS с CodeIgniter 3.1.8 и Bootstrap 4. Я решил добавить к нему темы. Приложение не является HMVC, только MVC.

Каталог themes находится вне приложения, как видно на изображении ниже:

введите описание изображения здесь

Внутри темы у меня есть каталог темы (конечно), который содержит «мастер-представление», layout.php :

введите описание изображения здесь

Как я использую представления темы

В application/core я добавил MY_Loader.php файл со следующим содержимым:

 <?php defined('BASEPATH') OR exit('No direct script access allowed');

  class MY_Loader extends CI_Loader {

    function theme_view($folder, $view, $vars = array(), $return = FALSE) {
      $this->_ci_view_paths = array_merge($this->_ci_view_paths, array(FCPATH . $folder . '/' => TRUE));
      return $this->_ci_load(array(
              '_ci_view' => $view,
              '_ci_vars' => $this->_ci_prepare_view_vars($vars),
              '_ci_return' => $return
          ));
    }

}
  

В моем index() методе контроллера Posts я загружаю представление, передавая ему данные:

 public function index() {
   //more code here
   $data['posts'] = $this->Posts_model->get_posts($config['limit'], $config['offset']);
    $this->load->theme_view('/themes/caminar/', 'layout', $data);
}
  

Проблема

В layout.php я включил таблицу стилей темы:

 <link rel="stylesheet" href="<?php echo site_url('themes/caminar/assets/css/main.css')?>">
  

Файл main.css действительно http://example.com/themes/caminar/assets/css/main.css еще не готов, браузер, вместо загрузки файла CSS, загружает представление 404.

Что я делаю не так?

Комментарии:

1. В caminar папке нет каталога themes , судя по вашему скриншоту.

2. Что показано в исходном коде страницы, на которой находится эта ссылка?

3. @Dave <link rel="stylesheet" href="http://ciblob.com/index.php/themes/caminar/assets/css/main.css">

4. Обратите index.php внимание на этот URL-адрес? Это, по-видимому, является источником вашей проблемы. Вероятно, вам не нужен / не нужен site_url вызов in вашего href. Вполне вероятно, что простое эхо /themes/caminar/assets/css/main.css будет работать так, как вы хотите.

5. @Dave Я заметил это, и я не думаю, что это источник вашей проблемы, по причинам, которые я упомянул.

Ответ №1:

Вы используете site_url вместо base_url при загрузке своих ресурсов.

URL-адрес сайта предназначен для ссылок в вашем приложении, обычно это функции контроллера.

base_url используется для ресурсов.

Поэтому измените свои пути на:

 <link rel="stylesheet" href="<?php echo base_url('themes/caminar/assets/css/main.css')?>">
  

Если это не решает проблему, возможно, на вашем сервере что-то мешает этому. В этом случае покажите нам ваш .htaccess, если вы используете apache, или вашу конфигурацию для указанного виртуального хоста, если вы используете nginx.

Если это apache, вы можете попробовать добавить это в свой .htaccess.

 RewriteCond $1 !^(index.php|assets|themes|images|js|css|uploads|favicon.png)
  

Комментарии:

1. Это прогресс, потому что он получил ‘index.php ‘из URL-адреса, но он по-прежнему не загружает таблицу стилей.

2. затем покажите нам конфигурацию вашего сервера на этом хосте. Потому что теперь это не проблема codeigniter.

3. Это сервер XAMPP.

4. Я добавил themes в .htaccess, и это работает : RewriteCond $1 !^(index.php|assets|themes|images|js|css|uploads|favicon.png) . Спасибо за помощь.