不包含CodeIgniter CSS文件

时间:2010-12-30 19:29:42

标签: mod-rewrite codeigniter-url

我的CodeIgniter安装有点奇怪,我使用modrewrite来缩短我的网址,例如我有一个api页面:

  

http://www.mydomain.com/api

它的效果非常好,我的.htaccess文件看起来像这样:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]

但是,如果我输入一个尾随斜杠,那真的很奇怪:

  

http://www.mydomain.com/api/

API页面加载正常,但它不包括所有页面中包含的Base CSS文件,如果它根本没有加载任何东西就没关系,但我需要阻止它加载实际api页面。任何建议都会有所帮助,

谢谢!

更新:我发现当我查看源代码时,我的CSS文件来自以下正确加载CSS时的文件:

  

http://www.mydomain.com/css/all.css

但是当它无法加载时,它来自

  

http://www.mydomain.com/api/css/all.css

2 个答案:

答案 0 :(得分:1)

使用css/all.css./css/all.css等相对网址路径(两者都是等效的)时,如果没有另外指定,则需要注意relative URL paths (like any relative URLs) are resolved using a base URL是当前文档的网址。

因此,在您的情况下,/api/api/是基本网址路径,相对网址路径css/all.css的解析方式会有所不同,具体取决于基本网址路径:

  • /api + css/all.css/css/all.css
  • /api/ + css/all.css/api/css/all.css

要征服这一点,您需要

  • 使用独立于基本网址路径的绝对网址路径/css/all.css
  • specify a different base URL in your HTML document(例如/);但请注意,这会影响所有相对网址,而不仅仅是相对网址路径
  • 调整您的相对网址路径以适应您的基本网址路径:
    • for /api使用css/all.css
    • for /api/使用../css/all.css
    • 用于/api/foo/bar/使用../../../css/all.css

我想第一个解决方案是最简单的。

答案 1 :(得分:1)

确保base_url文件中的config.php中有一个尾部斜杠:

$config['base_url'] = "http://www.mydomain.com/";

在处理链接等时总是打电话给base_url()

<link rel="stylesheet" type="text/css" href="<?php echo base_url(); ?>css/all.css">

编辑:
请注意,我正在使用此wiki page中的mod_rewrite但由于我的CI安装不在根(/ci173/内),RewriteBase不是{{1}但是/