2014-09-02 31 views
1

又來了一個問題,因爲我目前的解決方案是不是真的滿足了我對以下問題的HTML資源:我有在開發MVC模式的自己的PHP框架辦法避免的Apache別名路徑包括像CSS

。而我的路由器工作完美,所有,但我有一個問題,我找不到解決方案。

那麼我路由每個傳入的請求index.php文件位於我的框架的基路徑。 Ofcourse這是沒有問題的,包括CSS時,如用相對路徑的工作:

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

這個工程在瀏覽器中完美。當然,我在URL中輸入的內容並不重要,因爲每個請求都會按照上述方式重定向到索引,從而使合理的路由成爲可能。

但是,當我的網址包含多個類似子文件夾的斜槓時,例如:「/ manual/details/1_2」,我得到一個正常的路由過程,但瀏覽器找不到css文件,除非我添加「../」爲我的網址中的每個「/」映射回我的基路徑。

例如,對於上面的網址,這將工作,而不是:

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

我CURENT解決方案:

我寫在我的路由類中的PHP函數,確定所需要的量「../」模式,並且我總是在實施資源之前投入該功能,以便隨時建立精確的 路徑。

例子:

<link rel="stylesheet" type="text/css" href="<?=Router::getInstance()->getSubdirectoryPrefix()?>style/include/css/style.css" /> 

不用說,這是非常不方便,也如果你忘記將這個函數很爛。如果你的路線改變了,或者你忘記了你在一個子目錄中,你會想知道爲什麼你的資源找不到。

我也知道如何在Alias的虛擬主機配置中添加一個別名,例如Alias/public style /,但我想找到另一個 - 項目和PHP內部方式,而沒有一個不方便的廢話,比如粘貼別名函數all這個時間並且沒有設置虛擬主機選項,所以框架可以保持輕量級,並且不需要任何討厭的外部選項,比如修改虛擬主機。

我很想聽聽您的解決方案,最好是.htacces - OH中,在它說話時,我在這裏留下我的.htaccess代碼藏漢:

RewriteEngine On 

Options -Indexes 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule .* index.php [L] 

在此先感謝您的幫助〜

回答

1

您必須使用絕對路徑而不是相對您的html鏈接(CSS,JavaScript,圖像等)的路徑。

例如:

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

領先斜線(前style)是指從文檔根目錄文件夾開始,然後進入style文件夾,等等...(如果它不在根文件夾中,可能會有另一個前綴目錄)

由於某些規則可以創建虛擬目錄(例如:http://domain.com/some/directory/subdirectory/etc/),所以存在一些問題。

而且,在你的htaccess的,它不會傷害到使用前導斜槓(或RewriteBase

Options -Indexes 
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule .* /index.php [L] 

或(兩者是相同的)

Options -Indexes 

RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule .* index.php [L] 
+1

大聲笑,這是太容易...非常感謝這很像一個魅力! – Steini 2014-09-03 08:38:15