我有一个非常标准的.htaccess文件:
RewriteEngine on
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1 [L]
当我有一个参数时它很有效。例如
这/mysite/index.php?c=home
像/mysite/home
这/mysite/index.php?c=home&m=mymethod
像/mysite/home/mymethod
这样工作......除了加载相对资源。
网址/mysite/home/mymethod
似乎使网络浏览器的相对路径为/mysite/home
,而不是/mysite/
。当我转到/mysite/home/mymethod
并尝试使用相对路径加载css,image或js文件时(例如html说css/site.css
),浏览器会将home/
添加到开头路径。这意味着,Web浏览器尝试加载home/css/site.css
而不是css/site.css
...简而言之,当我指定第二个参数时,相对路径会被加入。
当我指定第二个uri参数时,为什么相对路径错误?
答案 0 :(得分:1)
当浏览器请求内容,并且该内容具有相对链接(对css,图像,js等)时,由浏览器决定相对URI base 。浏览器通过查看它请求的URL来执行此操作。例如,如果我在浏览器的位置栏中输入:
http://mysite.com/home/mymethod/maybe-a-file.html
从文件maybe-a-file.html
提供的(在此示例中为静态)内容包含指向图像的链接:
<img src="boo.jpg">
因此,浏览器需要确定相对URI基础是什么,以便实际请求该图像。这个例子很简单。它查看请求的URL,并删除最后一个文件节点,它得到:
http://mysite.com/home/mymethod/
因此它将图像加载到:
http://mysite.com/home/mymethod/boo.jpg
足够简单。但是,在您的情况下,浏览器正在加载此URL:
http://mysite.com/home/mymethod
这不是静态页面,但浏览器不知道。所有它知道的是URL和它返回的内容,它得到的内容包含:
<img src="boo.jpg">
所以它查看了URL并找到了一个基础:
http://mysite.com/home/
因此尝试将图像加载到:
http://mysite.com/home/boo.jpg
浏览器对/index.php
实际提供的内容一无所知。这一切都发生在服务器内部,它只知道它请求的URL,没有别的。
因此,为了解决这个问题,您必须将相对路径更改为绝对路径,以便浏览器不会错误地猜出错误的基本URI,或者您可以指定基本URI,以便浏览器不必猜测。您可以通过将其添加到页面的标题来执行此操作:
<base href="/" />
或任何基础应该是。
答案 1 :(得分:0)
http://ellislab.com/codeigniter/user-guide/helpers/url_helper.html
您可以使用网址助手$this->load->helper('url')
并使用base_url()
功能获取您的网站在链接或包含css / js文件时使用的基本路径。