如何在编码器中路由请求,以便我们可以提供静态css, js和img文件


How to route requests in codeigniter so we can serve static css, js and img files?

我正在为我拥有的项目使用codeigniter框架,但我有一个我无法解决的小问题。我想从视图中分离css样式和js脚本,所以我把它们分别放在单独的文件夹,/css和/js中,两者都在我项目的根文件夹中的资产文件夹中。整体结构如下:

/项目文件夹

——/应用程序

——/系统

——/资产

--------/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 = "资产/css/style.css ">

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

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

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

还有,如何解决这个问题?我应该手工添加一条路线吗?如果是这样,如何使一个控制器服务静态文件?

试试用这种方式链接你的样式表

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

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

当我们在HTML中使用链接标记时,我们指定了href属性,这是一个URI。如果是绝对路径,那就没有问题了,资源只是被取走了,然而,相对路径有个小问题,就像我用的那个。你看,用户代理或浏览器是通过程序将href附加到基础url计算基础url有不同的方式,W3C是这样说的

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

用户代理必须按照以下方法计算基本URI优先级(优先级从高到低):

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

所以,在阅读了这篇文章之后,解决方案很简单,我只需要指定要使用的基础url,在HTML文档中使用基础标签,像这样:

<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>

效果很好

无论如何,谢谢你的回复,我希望这个答案能对别人有所帮助。