php - 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/
解决方案
您没有提到为什么要使用它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/"
ScriptAlias 指令具有将目标目录标记为仅包含 CGI 脚本的附加效果。
因此 Apache 认为fil/
目录中的任何内容都是可执行的 CGI 脚本。当您尝试访问fil/css/menus.css
时,Apache 认为它是某种 CGI 脚本,并尝试执行它。那是行不通的——Apache 应该只是将该文件作为文本发送到浏览器,浏览器可以解析它并使用它来设置页面样式。
你有什么特定的理由使用它ScriptAlias
吗?对于普通的 Codeigniter 安装,您不应该需要它,您只会将其用于某些特定(而不是非常常见)的要求。如果可以,请摆脱它,然后重新启动 Apache。如果确实需要它,则需要更改它指向的目录才能使 Codeigniter 工作。
推荐阅读
- c++ - 我正在修改一些代码,并将一些函数更改为系统调用,但现在我遇到了一些让我感到困惑的错误
- session-state - 是否可以使用 GTM 跨多个数据中心进行粘性会话?
- c++ - 构建 CppBenchmark 时出错 (https://github.com/chronoxor/CppBenchmark)
- .net-core - OpenIdConnect 的点网核心设置 redirect_uri 与点网框架不同?
- c++ - C++ 可重用模块类设计
- sql - 如何从两个表中获取特定记录
- javascript - 使用 .map 转换嵌套的 For 循环
- laravel - 图像在数据库中保存为 C:\wamp64\tmp\phpAE1C.tmp 而不是保存在 public/images
- mysql - GROUP BY 和 SUM 但拆分 GROUP BY 结果
- events - 为 RxJava 2.x 配置 Grails 事件总线调度程序