【问题标题】:How to route requests in codeigniter so we can serve static css, js and img files?如何在 codeigniter 中路由请求,以便我们可以提供静态 css、js 和 img 文件?
【发布时间】:2016-11-04 19:13:23
【问题描述】:

我正在为我的一个项目使用 codeigniter 框架,但我有一个小问题我无法解决。我想将 css 样式和 js 脚本与视图分开,所以我将它们分别放在单独的文件夹中,/css 和 /js 都位于我项目根文件夹中的 assets 文件夹中。整体结构是这样的:

/项目文件夹

----/应用程序

----/系统

----/资产

--------/css

--------/js

----index.php

现在,我有一个名为 MyLibrary 的控制器,它有一个名为 newentry 的方法,当它被调用时会加载 newentry 视图。

<?php 
class MyLibrary extends CI_Controller
{
    public function newentry()
    {
    //The upload form
    $this->load->view('newentry');
    }
}

newentry 视图是一个简单的上传表单,它使用 style.css 和 script.js 进行样式设置和验证等...我正在使用 codeigniter 的 base_url() 方法来包含上述文件的路径和文件名.

<html>
<head>
    <link rel="stylesheet" type="text/css" href="<?php echo base_url();?>assets/css/style.css">
    <title><?php echo $title; ?></title>
</head>

<body>
 <form class = "dropezone" action = 'upload' method = 'POST' enctype = 'multipart/form-data'>
    <input type="file" name="document" />
    <input type="submit"/>
</form>
</body>
</html>

这一行是我有问题的地方: href="assets/css/style.css">

生成的字符串是正确的路径,意思是 localhost/project-name/assets/css/styles.css,但是,请求会发送到这个 url:

http://localhost/project-name/MyLibrary/localhost/test-pages/assets/css/style.css

当然,不是文件所在的位置。有谁知道为什么会这样?

另外,如何解决这个问题?我应该手动添加路线吗?如果是这样,如何制作一个提供静态文件的控制器?

【问题讨论】:

  • base_url 是否设置在 config.php 中?
  • 是的,是这样设置的:$config['base_url'] = 'localhost/test-pages/';
  • 尝试像这样将协议添加到 base_url:`$config['base_url'] = 'localhost/test-pages';`
  • $config['base_url'] 应由'http://localhost/test-pages/' 分配。也需要协议方案。

标签: php css codeigniter


【解决方案1】:

以这种方式尝试您的样式表链接

<link rel="stylesheet" href="<?php echo base_url('assets/css/style.css');?>">

【讨论】:

    【解决方案2】:

    我已经弄清楚为什么没有向正确的 url 发出请求。所以不,这与添加协议方案无关。 It has to do with how user agents calculate the base url。让我解释一下:

    当我们在 HTML 中使用链接标签时,我们指定 href 属性,它是一个 URI。现在,如果它是绝对路径,真的没有问题,只是获取资源,但是,相对路径有一点问题,就像我使用的那样。您会看到,用户代理或浏览器被编程为将该 href 附加到基本 url,并且他们计算基本 url 的方式有不同,here's what W3C has to say:

    用户代理必须计算基本 URI 以解析相对 URI 根据 [RFC1808],第 3 节。以下描述如何 [RFC1808] 专门适用于 HTML。

    用户代理必须根据以下公式计算基本 URI 优先级(从高到低):

    1. 基本 URI 由 BASE 元素设置。
    2. 基本 URI 由在协议交互期间发现的元数据给出,例如 HTTP 标头(参见 [RFC2616])。
    3. 默认情况下,基本 URI 是当前文档的基本 URI。并非所有 HTML 文档都有一个基本 URI(例如,一个有效的 HTML 文档可能会出现 在电子邮件中,并且不能由 URI 指定)。此类 HTML 文档 如果它们包含相对 URI 并依赖于 默认基础 URI。

    所以,看完这篇文章,解决方法很简单,我只需要在带有 base 标签的 HTML 文档中指定要使用的 base url,如下所示:

    <html>
        <head>
            <title>Home Page - wellcom</title>
            <base href = "<?php echo base_url(); ?>">
            <link rel="stylesheet" type="text/css" href="assets/css/style.css">
        </head>
    
        <body>
            <h3>HANIX</h3>
        </body>
    </html>
    

    它就像魔术一样工作。

    无论如何,谢谢您的回复,希望这个回答对其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 2019-01-22
      • 2018-05-22
      • 2015-03-01
      • 2017-08-16
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 2014-09-14
      • 2017-08-18
      相关资源
      最近更新 更多