CodeIgniter: CSS из внешнего файла не применяется

Код CSS в моем <CI root>/css/menus.css не применяется. Файл отображается без CSS.

Вот мой шаблон заголовка:

<html>
    <head>
        <title>air de java</title>
        <link rel = "stylesheet" type = "text/css" 
        href = "<?= base_url('css/menus.css'); ?>" media = "all">
        <meta http-equiv = "Content-Type" content = "text/html; charset=UTF-8">
    </head>
    <body>
        <h1>AIR DE JAVA</h1>
        ...

Когда я заменяю вызов PHP в атрибуте href на «http://localhost/fil/index.html», я получаю ошибку 404 (index.html — это фиктивный файл с тегом h1).

Я установил плагин URL. В моем контроллере у меня есть:

$this->load->helper('url');

Функция base_url() возвращает ожидаемый URL ("http://localhost/fil/css/menus.css").

Стоит заметить, что я использую XAMPP в Windows, и вот часть перенаправления моего httpd.conf:

<Directory "C:/Users/lolve/Dropbox/air de java/air_de_java_appliperso2">
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
#   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important.  Please see
# http://httpd.apache.org/docs/2.4/mod/core.html#options
# for more information.
#
Options Indexes FollowSymLinks Includes ExecCGI

#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
#   AllowOverride FileInfo AuthConfig Limit
#
AllowOverride All

#
# Controls who can get stuff from this server.
#
Require all granted
</Directory>

И псевдоним:

ScriptAlias /fil/ "C:/Users/lolve/Dropbox/air de java/air_de_java_appliperso2/"

Я потратил время на поиск в сети, но безуспешно.

Обновлено:

CodeIgniter ведет себя странно: похоже, он обращается к старым версиям моих файлов. Я видел это, потому что нажатие на кнопку вызывает функцию Javascript, старая версия которой содержала эту строку alert("enable");, и теперь у меня этой строки больше нет, но кнопка все еще там, и нажатие на нее вызывает уведомление хрома ... Очень странный. Я пытался нажать CTRL+F5, чтобы обойти кеш Chrome, но безуспешно. Из проводника то же самое: проблема исходит от CodeIgniter. Но почему? Также отладчик Chrome указал на то, что возникает ошибка с загрузкой menus.css: CodeIgniter: CSS из внешнего файла не применяется

РЕДАКТИРОВАТЬ

Я просмотрел журналы Apache и вот что нашел:

[Sat Feb 23 18:58:59.817271 2019] [win32:error] [pid 13940:tid 1900] [client ::1:50408] AH02102: C:/Users/lolve/Dropbox/air de java/air_de_java_appliperso2/css/menus.css is not executable; ensure interpreted scripts have "#!" or "'!" first line, referer: http://localhost/fil/ [Sat Feb 23 18:58:59.817271 2019] [cgi:error] [pid 13940:tid 1900] (9)Bad file descriptor: [client ::1:50408] AH01222: don't know how to spawn child process: C:/Users/lolve/Dropbox/air de java/air_de_java_appliperso2/css/menus.css, referer: http://localhost/fil/

«когда я заменяю вызов php в атрибуте href на «локальный/файл/index.html», я получаю ошибку 404. (index.html — это фиктивный файл с тегом h1)» ... Что вы хотите этим сказать?
Samuel Asor 23.02.2019 09:56

извините, это было не совсем так: в моем браузере, если я пытаюсь получить доступ к "локальный/файл/css/menus.css", я получаю ошибку 500 и независимо от этого, если я пытаюсь заменить в своем файле header.php href (с вызовом php) по href='локальный/файл/css/menus.css' ничего не происходит, я получаю страницу без применения css. теперь должно быть понятнее.

lolveley 23.02.2019 10:26

Хорошо. Итак, проверив структуру папок, где именно вы сохранили menus.css?

Samuel Asor 23.02.2019 11:37

он находится в папке <root>/css, где root — это каталог, содержащий приложение codeigniter и системные каталоги.

lolveley 23.02.2019 11:40

Хорошо. Из вашего файла XAMPP httpd.conf какое значение у вас есть для DocumentRoot ?

Samuel Asor 23.02.2019 11:57

это DocumentRoot "C:/xampp/htdocs", но у меня есть псевдоним: ScriptAlias/fil/ "C:/Users/lolve/Dropbox/air de java/air_de_java_appliperso2/"

lolveley 23.02.2019 13:09

Ну, я действительно не знаю, чего вы пытаетесь достичь, изменяя значения по умолчанию в вашем httpd.conf. Я предлагаю вам вернуть значения по умолчанию и проверить еще раз. <Directory "C:/xampp/htdocs"> и ScriptAlias /cgi-bin/ "C:/xampp/cgi-bin/"

Samuel Asor 23.02.2019 14:02

это потому, что сайт расположен в каталоге dropbox, поэтому я добавил заголовок «каталог» к каталогу dropbox и псевдоним «/ fil» к этому каталогу. Я нашел это в учебнике и показался естественным (естественная цель псевдонимов?).

lolveley 23.02.2019 14:08

@SamuelAsor: посмотрите, пожалуйста, проблема определенно исходит от codeIgniter.

lolveley 23.02.2019 19:04
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
9
97
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы не упомянули, почему используете этот ScriptAlias, но проблема в этом. Запись журнала Apache, которую вы цитируете, показывает:

... menus.css is not executable; ... referer: http://localhost/fil/

Итак, вы посетили http://localhost/fil/, и Apache попытался выполнять вашего CSS, что, конечно, не имеет смысла. Почему Apache пытается это сделать? Из-за этого:

ScriptAlias /fil/ "C:/Users/lolve/Dropbox/air de java/air_de_java_appliperso2/"

Согласно документация Apache для ScriptAlias:

The ScriptAlias directive has the additional effect of marking the target directory as containing only CGI scripts.

Таким образом, Apache считает, что все, что находится внутри каталога fil/, является исполняемым сценарием CGI. Когда вы пытаетесь получить доступ к fil/css/menus.css, Apache думает, что это какой-то CGI-скрипт, и пытается его выполнить. Это не сработает — Apache должен просто отправить этот файл в виде текста в браузер, который сможет проанализировать его и использовать для оформления страницы.

У вас есть какая-то конкретная причина использовать это ScriptAlias? Вам не нужно это для обычной установки Codeigniter, вы будете использовать это только для некоторых конкретных (и не очень обычных) требований. Избавьтесь от него, если можете, и перезапустите Apache. Если вам это нужно, вам нужно будет изменить каталог, на который он указывает, чтобы заставить Codeigniter работать.

спасибо, я нашел этот ответ вчера и был готов написать его сейчас, но вы были быстрее. в любом случае, спасибо!

lolveley 24.02.2019 16:50

Другие вопросы по теме