2011-11-14 31 views
3

我通常指我的網站上使用絕對路徑的任何資產,這樣我就不必擔心資產相對於當前文件的位置。在非根目錄中部署的絕對路徑

<!-- Using a absolute path. --> 
<img src="/images/flag.png" /> 
<!-- Using a relative path. --> 
<img src="../../../images/flag.png" /> 

但是,這次我需要在非根位置託管網站,例如http://my-server.com/holiday/

我該怎麼辦?我正在尋找一種解決方案,不需要我更改文件中的路徑。如何配置服務器(Apache)將http://my-server.com/holiday/視爲「根」?

澄清: 我還需要http://my-server.com/表現得 「正常」。也就是說,它應該仍然指向http://my-server.com/index.html,即不會被重定向到http://my-server.com/holiday/

回答

0

我不想說這個,但以上都不提供解決方案。 @Zoltan和@stslavik的回答很接近,但不幸的是,在部署時沒有奏效;不過,我希望其中一人能夠工作。

因此,我在PHP中使用了named constantsinclude files的組合。更多細節:File Structure for a PHP Project。請注意,它不一定是PHP;您可以使用其他提供類似功能的語言。 @margusholland的+1,他的回答讓我嘗試了這個解決方案。

1

嘗試添加到您的.htaccess

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^(www.)?DOMAINNAME.com$ 
RewriteCond %{REQUEST_URI} !^/holiday/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /holiday/$1 
RewriteCond %{HTTP_HOST} ^(www.)?DOMAINNAME.com$ 
RewriteRule ^(/)?$ holiday/index.php [L] 

或者看看這裏 - Changing the root folder via .htaccess

+0

我需要將這個.htaccess文件放在'http:// my-server.com /'或'http:// my-server.com/holiday /'上嗎? – moey

+0

到您想要重定向的地方 - 'http:// my-server.com /' –

+0

謝謝你們!我認爲這非常接近我尋找的解決方案。但是,我仍然希望保留'http:// my-server.com /'到'http:// my-server.com/index.html'或'http://my-server.com/index .php'。 – moey

0

我不認爲這是要發生的事對你的男人,對不起。

你在你的文檔中有絕對路徑,並且希望apache能夠在不影響真正的文檔根的情況下對它們進行預加/假日操作?你可以擁有一個或另一個,但不能同時擁有兩個。

您需要進行批量編輯並預先安裝目錄,或將images/css/etc移動到實際的根目錄中。

mod_rewrite功能強大,但不能真正確定意圖,並根據用戶需要以兩種不同的方式解析相同的URL。

編輯:

我錯了,但我沒有你的答案。您可以使用IS_SUBREQ在mod_rewrite的只能從您的/holiday/index.php

0

容易申請子請求重新寫條件...

# Assuming mod_rewrite is an option... 
<IfModule mod_rewrite.c> 
    # Turn it on! 
    RewriteEngine on 

    # If path is /images/flag.png, connect to /holiday/images/flag.png 
    RewriteBase /holiday/ 
</IfModule> 

假設我理解什麼你的意思是,這應該會讓你很好。程序的問題,這個.htaccess應該在/假期/

我在MAMP上測試一個網站的基地是在http://localhost:8888/SocialNetwork/ ......如果我沒有那個,我的絕對路徑, /profile會去http://localhost:8888/profile/而不是http://localhost:8888/SocialNetwork/profile

+0

我已經確認mod_rewrite已打開。但是,這似乎並不奏效。 :( – moey

+0

要找出_mod_rewrite_是否打開:http://stackoverflow.com/q/8242922/583539 – moey

+0

假設你使用PHP和Apache,如果你創建一個PHP文件說'<?php phpinfo();?> '然後用你的瀏覽器訪問它,'mod_rewrite'將出現在文檔頂部附近的「Apache2handler」信息下。 – stslavik

2

如果您使用的是Apache,那麼您可以通過在路徑中使用SSI變量來完成一件相當簡單的事情。 做全局替換所有SRC =「的/喜歡的東西

src="<!--#echo var="prefix" -->/ 

,然後在你的htaccess的特定文件夾的定義前綴變量/度假

對於那些沒有變異位點或SSI,它只會顯示爲註釋,或者您可以將其定義爲空字符串。

當然這意味着你必須打開Apache中的SSI。

+0

如果SSI未啓用,那麼您將「前綴」定義爲空字符串的位置? – moey

+0

感謝您的意見。但是,假設這會起作用,那麼在_heredoc_和_nowdoc_中都不會很好地工作,這在PHP項目中很常見。 – moey

+0

+1,因爲它引導我轉到不同的想法/解決方案。 :) – moey

-1

編輯:

當然,它會工作,如果你使用PHP。添加:

<? define(_BASE_, substr($_SERVER['SERVER_NAME'] . "/" . $_SERVER['REQUEST_URI'], 0, strrpos($_SERVER['REQUEST_URI'], "/"))); ?> 

<html> 

    <head> 
     <script src="<?=_BASE_?>/path_relative_to_project_root"></script> 
    </head> 

    <body> 
     <img src="<?=_BASE_?>/path_relative_to_project_root"> 
    </body> 

</html> 
+0

正如問題所述,我一直在尋找一種不需要更改源代碼的解決方案。 – moey

-1

如果你有一個應該被重定向文件擴展名的列表,你可能想使用使用模式匹配againt擴展重寫條件。

另一種解決方案是簡單地在根目錄下創建一個/ images目錄並讓圖像從那裏下載。或者在那裏有鏈接到你的路徑中的圖像。

相關問題