CodeIgniter .htaccess url可以工作但不能使用第二个(方法)参数

时间:2013-10-24 03:21:43

标签: php .htaccess codeigniter

我有一个非常标准的.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参数时,为什么相对路径错误?

2 个答案:

答案 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文件时使用的基本路径。