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

时间:2016-07-02 14:33:01

标签: php css codeigniter

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

/项目文件夹

---- /应用

---- /系统

---- /资产

-------- / CSS

-------- / JS

----的index.php

现在,我有一个名为MyLibrary的控制器,它有一个名为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中” &GT;

生成的字符串是正确的路径,意味着localhost / project-name / assets / css / styles.css,但是,请求被发送到此URL:

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

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

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

  

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

     

用户代理必须根据以下内容计算基URI   优先级(最高优先级到最低优先级):

     
      
  1. 基本URI由BASE元素设置。
  2.   
  3. 基本URI由协议交互期间发现的元数据提供,例如HTTP标头(参见[RFC2616])。
  4.   
  5. 默认情况下,基URI是当前文档的URI。并非所有HTML文档都具有基本URI(例如,可能出现有效的HTML文档   在电子邮件中,可能不是由URI指定)。这样的HTML文档   如果它们包含相对URI并依赖于a,则被认为是错误的   默认基本URI。
  6.   

所以,在阅读完本文后,解决方案很简单,我只需要在带有基本标记的HTML文档中指定要使用的基本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>

它就像魔法一样。

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