codeigniter 基目录中的 css/image/js 文件问题

Posted

技术标签:

【中文标题】codeigniter 基目录中的 css/image/js 文件问题【英文标题】:Issue with css/image/js files in codeigniter base directory 【发布时间】:2013-12-28 21:15:06 【问题描述】:

我一直在设置 .htaccess 文件以将所有请求重定向到 windows 7 中 xampp 下的 index.php 文件(从 url 中删除 index.php),并认为我可能为自己创建了一个问题...但话又说回来,它可能无关紧要。

我似乎在引用我在基本目录中为 css、图像和 js 设置的目录时遇到问题。我已经追踪了这个问题,但还不知道如何解决它。如果我导航回目录 ../css/stye.css 与 css/style.css ,则样式表将加载。如果我输入带有索引函数调用的基本 url 或基本 url,一切都会按预期加载:

http://localhost/site
http://localhost/site/home

现在当我添加控制器方法名称时

http://localhost/site/home/index

我的 css 不再包含(直到我进入 firebug 并导航回一个目录)

位于我的基本目录中的 .htaccess 文件(我发现它可以与 xampp 一起使用)中的代码如下:

RewriteEngine on
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

我公开承认,我对 .htaccess 文件的了解并不多。

CSS 链接:

<link rel="stylesheet" type="text/css" href="css/jmw.css" />

编辑

按照 Rajeev Ranjan 的建议编辑.htaccess 文件

RewriteEngine on
RewriteCond $1 !^(index\.php|robots\.txt|css|images|js)
RewriteRule ^(.*)$ ./index.php/$1 [L]

我假设每个视图都像 index.php 文件本身一样工作,并以这种方式访问​​目录。在样式表、javascript 或图像调用前面使用 base_url() 函数时一切正常,但我试图不在视图文件的多个位置依赖 base_url() 函数。

【问题讨论】:

能否显示css href &lt;link rel="stylesheet" type="text/css" href=""&gt; 编辑显示css href 【参考方案1】:

我也遇到了这个问题。请将此行放入您的.htaccess 文件中

RewriteCond $1 !^(index\.php|images|robots\.txt|css|img|js)

即。允许 css 。

万普:

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt|css|img|js)
RewriteRule ^(.*)$ ./index.php/$1 [L]

并通过调用 css

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

或者,

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

【讨论】:

仍然没有骰子。你会碰巧有我可以比较的 xampp 为你工作的 .htaccess 文件吗? 我寄予厚望,但这仍然没有解决我的问题。如果我在 config.php 或 routes.php 文件中错误配置了某些内容,这可能会导致我的问题吗?【参考方案2】:

你可以试试这个,例子

&lt;link rel="stylesheet" type="text/css" href="&lt;?=base_url()?&gt;css/jmw.css" /&gt;

【讨论】:

是的,这可以解决问题,但文件夹已移至基本目录以解决在代码中使用 base_url() 的需要。 你想使用另一个css文件夹的css文件吗? 问题不仅在于 css 目录,还在于 image 和 js 目录。如果我在调用 css 和 js 目录之前使用 base_url(),我仍然需要进入代码并在每个视图中的每个图像前面添加 base_url() ......这就是我想要的远离我最初将目录移动到基本目录的时候。 我想你可以参考这个***.com/questions/5450095/… 谢谢,但再次......问题不仅与css目录有关,还与js和images目录有关。我宁愿不对视图中显示的每个图像都使用 base_url() :/【参考方案3】:
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt|css|img|js)
RewriteRule ^(.*)$ ./index.php/$1 [L]

In second line ie;

RewriteCond $1 !^(index\.php|images|robots\.txt|css|img|js)

You have to pass the folder name of your css, js and image files like:
RewriteCond $1 !^(index\.php|images|robots\.txt|css|img|js|assets|images)

【讨论】:

【参考方案4】:

终于明白了!在过去几个月使用 codeigniter 并更广泛地了解 .htaccess 文件中到底发生了什么之后,解决方案是显而易见的。由于 .htaccess 文件指向控制器目录,因此每当我尝试从“/images”等访问我的图像/js/css 文件时,它都会在控制器目录中查找。

为了解决这个问题,我在 config.php 中设置了 base_url = '',并在我调用 images/js/css 的地方横向返回了一个目录 '../images/file.png'。简单的解决方案,我的大脑花了一点时间来点击:)

【讨论】:

以上是关于codeigniter 基目录中的 css/image/js 文件问题的主要内容,如果未能解决你的问题,请参考以下文章

子目录中的 CodeIgniter 站点,htaccess 文件可能会干扰主目录中的 htaccess 文件?

将图像上载到CodeIgniter中的另一个目录

使用 htaccess 删除子目录中的 codeigniter index.php

Codeigniter 中的路由 - 自动

使用 cpanel 的 codeigniter 密码保护目录

021.CI4框架CodeIgniter, 通过命名空间调用其它目录中的Controller控制器文件