首页 > 解决方案 > 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>
        ...

当我用“ http://localhost/fil/index.html ”替换 PHP 调用href属性时,我得到一个 404 错误(是一个带有 h1 标签的虚拟文件)。index.html

我已经安装了 url 插件。在我的控制器中,我有:

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

base_url()函数返回预期的 URL(“ http://localhost/fil/css/menus.css ”)

值得注意的是,我在 Windows 上使用 XAMPP,这是我的重定向部分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");,现在我没有这行了,但是按钮仍然存在,点击它会触发chrome的通知......很奇怪. 我试图按 CTRL+F5 绕过 chrome 的缓存,但没有成功。从资源管理器是一样的:问题来自 CodeIgniter。但为什么?此外,Chrome 的调试器指出了以下事实:负载存在错误menus.css请看看这个

编辑

我查看了 Apache 日志,这是我发现的:

[2019 年 2 月 23 日星期六 18:58:59.817271] [win32:error] [pid 13940:tid 1900] [client ::1:50408] AH02102: C:/Users/lolve/Dropbox/air de java/air_de_java_appliperso2/css/ menus.css 不可执行;确保解释的脚本有“#!” 或者 ”'!” 第一行,引用:http://localhost/fil/ [Sat Feb 23 18:58:59.817271 2019] [cgi:error] [pid 13940:tid 1900] (9)错误的文件描述符:[client ::1:50408 ] AH01222:不知道如何生成子进程:C:/Users/lolve/Dropbox/air de java/air_de_java_appliperso2/css/menus.css,引用者:http://localhost/fil/

标签: phpcsscodeigniter

解决方案


您没有提到为什么要使用它ScriptAlias,但这就是问题所在。您引用的 Apache 日志记录显示:

... menus.css 不可执行;... 推荐人:http://localhost/fil/

所以你访问了http://localhost/fil/,Apache 试图执行你的 CSS,这当然没有意义。为什么 Apache 试图这样做?因为这:

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

根据Apache 文档ScriptAlias

ScriptAlias 指令具有将目标目录标记为仅包含 CGI 脚本的附加效果。

因此 Apache 认为fil/目录中的任何内容都是可执行的 CGI 脚本。当您尝试访问fil/css/menus.css时,Apache 认为它是某种 CGI 脚本,并尝试执行它。那是行不通的——Apache 应该只是将该文件作为文本发送到浏览器,浏览器可以解析它并使用它来设置页面样式。

你有什么特定的理由使用它ScriptAlias吗?对于普通的 Codeigniter 安装,您不应该需要它,您只会将其用于某些特定(而不是非常常见)的要求。如果可以,请摆脱它,然后重新启动 Apache。如果确实需要它,则需要更改它指向的目录才能使 Codeigniter 工作。


推荐阅读