我正在为我所拥有的项目使用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
当然,这不是文件的位置。有谁知道为什么会这样?
另外,如何解决这个问题?我应该手动添加路线吗?如果是这样,如何制作一个提供静态文件的控制器?
答案 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 优先级(最高优先级到最低优先级):
- 基本URI由BASE元素设置。
- 基本URI由协议交互期间发现的元数据提供,例如HTTP标头(参见[RFC2616])。
- 默认情况下,基URI是当前文档的URI。并非所有HTML文档都具有基本URI(例如,可能出现有效的HTML文档 在电子邮件中,可能不是由URI指定)。这样的HTML文档 如果它们包含相对URI并依赖于a,则被认为是错误的 默认基本URI。
醇>
所以,在阅读完本文后,解决方案很简单,我只需要在带有基本标记的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>
它就像魔法一样。
无论如何,谢谢你的回复,我希望这个回答对别人有帮助。