2014-09-11 47 views
2

在我的.htaccess文件中,我將所有請求重定向到我的public/index.php文件。鏈接到靜態資產,自定義MVC應用程序(PHP)

從那裏我做路由,根據URL給出的參數。

問題是我的css文件被包含在view,其中說href="css/app.css"。當指定像http://hostname/public/something這樣的請求時,所有工作都很好,但是如果我更深入一個目錄,比如說例如: http://hostname/public/something/else,我的css會中斷。

我該如何解決這個問題?

回答

4

那是因爲你正在使用相對路徑,而不是爲所有的HTML鏈接(圖像,JavaScript,CSS,HREF鏈接)絕對路徑。

實際上,您的規則可以創建虛擬目錄。

比方說,你有CSS的鏈接,這樣

<link rel="stylesheet" type="text/css" href="css/style.css"> 

對於一些例子,這裏是路徑解析

  • /public/something - >/public/css/style.cssGOOD
  • /public/something/else - >/public/something/css/style.cssWRONG

爲了避免這種行爲,使用絕對路徑

<link rel="stylesheet" type="text/css" href="/public/css/style.css"> 

或者,如果你不想改變你所有的HTML鏈接,您可以後<head> HTML添加此行標籤

<base href="/public/"> 
+0

感謝您指出我在正確的方向,有什麼困惑我,就是我試着用'/公/'並沒有工作,但真正的問題是,當我在本地開發時,我從'userdir'提供了這個服務,所以最後我必須做的是將路徑指定爲'/〜myusername/path/to/project /公/ CSS/app.css'。 – branquito 2014-09-11 13:12:43

+0

在我的回答中,我使用了'/ public /',因爲那是你在你的問題中寫的。但它可能是別的,就像你說的。如果你很容易理解,你必須使用你的項目的路徑。例如,在本地,你可以將項目放在'/ xxx/yyy/my/project /'中,那麼你將擁有'/ xxx/yyy/my/project /'作爲絕對路徑,因爲你可以通過'http :// localhost/xxx/yyy/my/project /' – 2014-09-11 13:15:46

1

使用絕對鏈接如href="/public/css/app.css"

如果/public部分是可變的,例如,開發機器和生產服務器之間,然後用一個變量或常量:

<?php echo ROOT_URL . '/css/app.css'; ?> 

做的最有用的東西通常是創建一個小的輔助函數:

<?php echo css('app.css'); ?> 

根據什麼那種你可以使用模板系統,這可能看起來像你一樣的:

{{ css 'app.css' }} 
+0

我沒有使用任何模板系統,這是簡單的MVC,我從頭開始,因爲這是一個小項目。我會盡力實現像你所說的。 – branquito 2014-09-11 13:15:38

1

嘗試增加一個全局變量或常量或某些功能,以您申請PHP命名爲:$ site_root,這是您的根目錄的路徑。例如笨這是否與url_helper,看到這一點:https://ellislab.com/codeigniter/user-guide/helpers/url_helper.html
你的CSS文件之前,然後添加$ siteRoot

... href="<?php echo site_url() ?>/link/to/your/file.css" ...