CodeIgniter .htaccess url 有效,但不适用于第二个(方法)参数


CodeIgniter .htaccess url works but not with second (method) parameter

我有一个非常标准的.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似乎使Web浏览器具有相对路径/mysite/home而不是/mysite/。当我转到/mysite/home/mymethod并尝试加载具有相对路径的 css、图像或 js 文件(例如 html 表示 css/site.css )时,浏览器会将home/附加到路径的开头。这意味着,网络浏览器尝试加载home/css/site.css而不是css/site.css...简而言之,当我指定第二个参数时,相对路径就会被灌输。

为什么在指定第二个 uri 参数时相对路径错误?

当浏览器请求内容,并且该内容具有相对链接(指向css,图像,js等)时,由浏览器确定相对URI数。浏览器通过查看它请求的 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="/" />

或任何基地应该是什么。

http://ellislab.com/codeigniter/user-guide/helpers/url_helper.html

您可以使用网址帮助程序$this->load->helper('url')并使用base_url()函数来获取要用于链接或包含 css/js 文件的网站的基本路径。