URL路由和相对路径

时间:2011-11-07 08:43:12

标签: codeigniter url-routing relative-path

假设默认控制器是root.php,那么两个URL都可以正常工作

website.com/
website.com/root

如果控制器具有名为 login 的功能,则此URL也有效

website.com/root/login

但是,在第一个示例中使用的HTML模板在第二个示例中不起作用,例如此相对路径不再有效

<link rel='stylesheet' href='stylesheets/style.css'/>

而不是website.com/root/login我必须使用不同的路径

<link rel='stylesheet' href='../stylesheets/style.css'/>

即使我在同一个控制器中并尝试使用相同的样式表。

有办法吗?

2 个答案:

答案 0 :(得分:3)

这是因为浏览器正在寻找相对于地址栏中url的样式表。

所以在第二个url中的第一个样式表的情况下,即:

<link rel='stylesheet' href='stylesheets/style.css'/> @ website.com/root/login

浏览器正在

中查找文件
website.com/root/stylesheets/styles.css

哪个不是保存文件的位置。我假设他们实际上在website.com/stylesheets/styles.css

最简单的方法是简单地制作相对于网站根目录的所有路径。

所以如果你试试这个,你会发现它有效。

<link rel='stylesheet' href='/stylesheets/style.css'/>

答案 1 :(得分:2)

如果您的开发环境位于子目录中(例如:htdocs/myWebSite/),但您的生产网站不在子目录中,那么只需使用/stylesheets/style.css即可在两个版本之间来回迁移您的网站令人难以置信的痛苦,因为您必须浏览每个这样的链接,并从每个链接中添加/减去/myWebsite

可能的解决方案是在代码中定义代表根目录的全局变量,然后在所有链接的开头使用该变量。例如:

$BASEurl = "http://localhost/myWebsite";
echo "<link rel='stylesheet' href='$BASEurl/stylesheets/style.css'>";

然后,当您将项目上传到生产服务器时,只需将$ BASEurl的值更改为http://www.nameOfYourDomain.com,就可以了。

相关问题