2012-03-06 38 views
0

如果我們有一個文件結構如下所示:(即<a href="aboutus/aboutus.html">Apache如何知道何時以及如何查找相對路徑?

/ 
├── aboutus 
│   ├── aboutus.html 
│   └── logo.jpg 
├── validate.php 
├── index.html 
└── logo.jpg 

雖然人們必須鏈接到aboutus.html時,在這兩個index.htmlaboutus.html如果你把logo.jpg到指定的文件夾,Apache會知道哪些一個加載。它可能只查找當前目錄中的文件。我在我的虛擬主機部分以下指令:

RewriteCond %{REQUEST_URI} !^/validate.php 
RewriteRule ^/(.*) /validate.php?uri=$1 

我與這些rewerite規則總新手,所以這是我上面做的事:我希望它截取來自任何請求瀏覽器。這些包括在地址欄中輸入的請求,以及網頁內的請求(即.js文件,圖像...)。下一步,我想發送請求的文件到validate.php

validate.php顯然驗證用戶,但基本上只是返回用戶請求的任何文件。如果aboutus.html插入其圖片像​​那樣,我如何確保validate.php返回/aboutus/logo.jpg而不是/logo.jpg

回答

1

本質上,絕對路徑從基資源URL相對資源URL(關於這一點here)測定。爲了使您的validate.php能夠正確解析圖像,樣式表等的相對URL,您應該以某種方式讓它知道包含這些資源的文檔的絕對URL(如果文檔具有<base>標籤,則更加複雜)。

0

無論如何,在htaccess文件中,你總是使用絕對路徑。我的意思是從根斜槓開始。

嘗試使用:

RewriteCond %{REQUEST_URI} !^/validate.php 
RewriteRule ^(.*) /validate.php?uri=$1 
1

北辰,你必須保持兩方面的獨立:

  • 任何HTTP請求,如GET是絕對的,而瀏覽器將根據引用文檔的路徑(或<base>標籤中定義的路徑)轉換任何相關的href或src屬性,因此如果您加載了http://somehost/fred/xx.html,那麼r引用圖像style1/images/pic.png然後瀏覽器將請求http://somehost/fred/style1/images/pic.png

  • mod_rewrite如何處理路徑是完全不同的。這是服務器的業務。見,說明如何相對和絕對路徑的每個服務器的配置(或的apache.conf vhost.conf)內被評估的RewriteRule Documentation和每個目錄結構內(例如,在.htaccess或塊)

相關問題