2011-11-07 153 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