2011-11-07 156 views
1

比方说,默认的控制器是root.php那么这两个网址会工作URL路由和相对路径

website.com/ 
website.com/root 

如果控制器有一个名为函数登录那么这个URL也有效

website.com/root/login 

但在第一个例子中用于工作的HTML模板在第二个例子中不起作用,例如这个相对路径不再有效

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

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

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

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

有没有办法解决它?

回答

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'/> 
+0

尴尬简单。谢谢! – Vitaly

+0

是的,但是如果你不能使用绝对路径会怎么样。假设您的开发框以root用户运行,但应用程序托管在服务器上的虚拟目录中? – Yevgeniy

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,你是好去。

+1

这是一个天才的解决方法,不断改变我从我的发展环境到我的网站的路径,正如你所说的,在屁股上有很多痛苦。谢啦。 – Charas