2010-07-14 88 views
3

在我的PHP腳本中,我創建了一個常量變量,它定義了要放在超鏈接中的基礎URL,但是我真的需要這個嗎?超鏈接開始斜槓?

這裏是我的意思的一個例子。

我有這樣的:

// base url is only defined once and reused throughout 
define("__BASE_URL","http://localhost/test1/"); 
print '<a href="'.__BASE_URL.'index.php?var1=open/>Open</a>'; 

(我在我的劇本很多,這些散佈的。)

我想這和它的作品:

print '<a href="index.php?var1=open/>Open</a>'; 

所以這方法是這樣做的正確方法?我注意到第二種方法甚至可以加載圖像,CSS和JavaScript文件。

回答

1

這取決於。沒有__BASE_URL,您的鏈接將與當前文檔相關。在你的情況下,這意味着index.php必須與具有index.php鏈接的文件在同一個目錄中。

如果您有__BASE_URL,那麼無論其包含文件位於何處(即不必與index.php位於同一目錄中),該鏈接都可以工作。

另一種選擇是僅使用起始斜線。那麼你的鏈接將是相對於你的域根:

print '<a href="/index.php?var1=open/>Open</a>'; 

換句話說,上面的鏈接將指向http://localhost/index.php

0

這聽起來像你的問題是關於絕對與相對URL。你想要可移植性嗎?通常最好使用相對URL,特別是如果您計劃在測試環境中工作,然後再將文件傳輸到生產環境。

3

這真的歸結爲你如何構建你的網站。相對URL非常好(通過做href="index.php"你真的在說href="./index.php"),但是當你開始將頁面分佈到多個目錄時,它們可能開始變得混亂。

個人而言,我喜歡將所有相對URL都放在根目錄下,這意味着我的所有URL都以斜槓('/')開頭。這樣,無論我的腳本是在/還是/ admin,這都沒關係,因爲我將始終有一個常量參考點 - 文檔根目錄 - 而不是結構中的某個相對目錄。

您的第一個例子是,將文檔路徑存儲在變量中,當您開始開發您希望路徑可配置的較大系統時,它真的開始派上用場。例如,也許你希望你的系統管理員能夠定義從哪裏獲取圖像,或者緩存下載的位置。

所以真的考慮你的用例和系統的大小。

另外請記住,如果您曾經將腳本移動到另一個服務器,您的URL和目錄結構可能會更改,這可能會造成嚴重破壞(例如,您可能會將腳本移動到不同的子域中)等)。在這種情況下,很多人都會放棄Apache的mod_rewrite。