2013-04-29 111 views
4

我使用絕對路徑來引用CSS,圖像和JavaScript文件等資源。所以在index.html<head>我有這樣的事情:如何重寫webserver子目錄上的絕對資產路徑

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

假設我的項目目錄如下:

 
- index.html 
- assets/ 
-- css/ 
--- style.css 

能正常工作在我的本地網絡服務器,我的文檔根目錄設置爲這個目錄使用<virtualhost>指令。但是當我把它放在網絡服務器的子目錄(例如http://www.example.com/subdirectory/)上時,它在訪問http://www.example.com/subdirectory/index.html時不再找到資產。

我該如何解決這個問題,而不必在index.html中使用相對路徑?可以通過子目錄中的.htaccess文件來實現嗎?如果是,如何?

編輯

有在Web服務器上的根級別的其他文件夾,不應該由發生了/subdirectory/

+0

/assets/css/style.css是一個相對路徑,所以我不確定你的意思。 – dave 2013-04-29 19:28:26

+0

@dave這是不正確的,這是絕對的,因爲它以斜槓開始。 – Nelson 2013-04-29 19:29:04

+0

解決方案是使用相對路徑,儘管你不喜歡它。 – Nelson 2013-04-29 19:31:47

回答

3

如果一切低於subdirectory,可以使用簡單重寫

RewriteEngine on 
# don't rewrite, if it is already rewritten 
RewriteCond %{REQUEST_URI} !^/subdirectory 
# only rewrite requests for files below /assets 
RewriteCond %{REQUEST_URI} ^/assets/ 
RewriteRule ^.*$ /subdirectory/$0 [L] 
+0

這不起作用。瀏覽器仍在請求http://www.example.com/assets/css/style.css – mediafreakch 2013-04-30 06:00:44

+0

@mediafreakch它適用於我的測試環境。你有根目錄中的.htaccess嗎? – 2013-04-30 08:13:20

+0

啊,不,我把它放在/子目錄中。如果我把它放在根目錄下,它基本上可以工作。但是現在我明白你的意思是「一切都在子目錄下」。在我的設置中並非如此。還有許多其他目錄不應受到影響。我如何修改解決方案以不影響其他人? – mediafreakch 2013-04-30 11:42:09

0

你可以把這個在你頭上的任何重定向的影響:

<base href="http://www.example.com/subdirectory/"> 
+1

這將無法正常工作,如果他的網站是相對的資產/ css/style.css',但它們是絕對的'/ assets/css/style.css' – Nelson 2013-04-29 19:32:38

+0

這仍然是相對的。看看它。 – dave 2013-04-30 02:54:08

+0

反對。不適用於絕對路徑。 – GijsjanB 2014-12-03 09:19:48

相關問題