代码之家  ›  专栏  ›  技术社区  ›  lolveley

codeIgniter:没有从外部文件应用css

  •  1
  • lolveley  · 技术社区  · 7 年前

    我生活中的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 ")

    值得注意的是,我正在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的缓存,但没有成功。来自explorer的问题也是一样:问题来自CodeIgniter。但为什么呢?此外,Chrome的调试器指出,加载 menus.css : plz have a look at this

    编辑

    我查看了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是不可执行的;确保解释的脚本有“#!”或者“!”第一行,参考: 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/

    0 回复  |  直到 7 年前
        1
  •  1
  •   Don't Panic    7 年前

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

    ... 菜单。css是不可执行的。。。推荐人: http://localhost/fil/

    所以你来了 http://localhost/fil/ ,而阿帕奇试图 处决 你的CSS,这当然毫无意义。为什么Apache要这么做?因此:

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

    根据 the Apache documentation for ScriptAlias :

    ScriptAlias指令的另一个作用是将目标目录标记为仅包含CGI脚本。

    所以阿帕奇认为 fil/ 目录是一个可执行的CGI脚本。当你试图访问 fil/css/menus.css ,Apache认为它是某种CGI脚本,并试图执行它。这是行不通的——Apache应该将该文件作为文本发送到浏览器,浏览器可以解析该文件并使用它来设置页面样式。

    你有什么特别的理由使用它吗 脚本别名 ? 你不应该在普通的Codeigniter安装中使用它,你只需要在一些特定的(不是很常见的)需求中使用它。如果可以的话,请删除它,然后重新启动Apache。如果您确实需要它,您需要更改它所指向的目录以使Codeigniter工作。

    推荐文章