2016-09-25 157 views
0

我有一個網頁,它可以在實時服務器上正常工作。但是,使用cms編輯器創建的文件(jpg,pdf等)的某些鏈接包含相對路徑。 當我在我的本地測試服務器上運行該頁面時,服務器將頁面從localhost的子文件夾中提取出來,因此文件的相對路徑是錯誤的,因爲它們在開始時缺少子文件夾。 html頁面加載正常。這只是其中的一些文件有錯誤的路徑,不會加載。從http://localhost/level1/htaccess重寫規則問題

文件

頁面加載正試圖從http://localhost/level2/加載和我得到的404。

他們應該從http://localhost/level1/level2/

所以我設置被加載重寫規則,以糾正路徑,但無論怎樣我都試過,我不能得到它的工作。我嘗試了各種標誌,包括[R,L],但沒有任何更改HTML中的URI。

目前我有:

RewriteRule ^/level2/(.*)$ /level1/level2/$1 [R] 

有什麼建議?

感謝

回答

0

聽起來像這些鏈接是相對路徑,但絕對者(從一個前導斜槓(/)。這就是爲什麼問題發生在所有。相對路徑使更多的意義。

這將是版本到你的HTTP服務器的主機配置內部使用:

RewriteEngine on 
RewriteRule ^/level2/(.*)$ /level1/level2/$1 [L,QSA] 

這裏的版本.htaccess樣式文件(注意沒有前導斜槓):

RewriteEngine on 
RewriteRule ^level2/(.*)$ /level1/level2/$1 [L,QSA] 

你可以使用可以在使用的版本都情況:

RewriteEngine on 
RewriteRule ^/?level2/(.*)$ /level1/level2/$1 [L,QSA] 

不過請注意,在一般人應該始終喜歡將這樣的http服務器主機配置中的規則。 .htaccess樣式文件出了名的錯誤容易出錯,很難調試,他們真的減慢服務器,往往沒有。 .htaccess樣式文件只爲那些使用真正便宜的虛擬主機提供商的人提供了最後的選擇。或者在Web應用程序必須編寫自己的重寫規則的情況下,這顯然是自己的安全噩夢...

+0

在我的無知中我認爲重寫了engibe,因爲它在基本的apache conf文件中打開我的本地設置。但是,我發現,因爲我使用多個域的虛擬主機,所以我需要在每個虛擬域中使用「RewriteOptions inherit」。 – RobC

+0

這是我不明白的東西。出於兩個原因:1.如果引擎未啓用某個虛擬域,那麼您應該得到一個錯誤。你沒有檢查你的錯誤日誌文件嗎? 2.如果您在本地使用虛擬主機,那麼爲什麼不同級別的模糊?只需定義一個虛擬主機,以反映您在生產環境中的情況! – arkascha

+0

您指出的問題是通過cms編輯器文件上傳程序設置的領先/關於少數文件的問題。 我已經採取了主導斜線,所以路徑是相對的,並且我的本地設置一切正常。 – RobC