2013-07-16 18 views
0

我目前正在本地機器上開發一些軟件。爲了這個問題,我們打電話給軟件StackOverflow。我有以下幾頁安全地編寫跨環境傳輸的URL

C:\sites\StackOverflow\index.php 
C:\sites\StackOverflow\content\page1.php 
C:\sites\StackOverflow\content\page2.php 
C:\sites\StackOverflow\content\page3.php 

在我目前的環境中,http://localhost/StackOverflow/index.php成功運行。我爲內容頁面編寫的URL看起來與http://localhost/StackOverflow/content/page1.php類似。

當我將其部署到生產中時,URL將不再是本地主機,而是一個尚未確定的IP或主機名。我應該如何編寫我的URL,以便在儘可能少部署時儘可能少地完成工作?

回答

1

相對於根:/開始它們。

例如:

/StackOverflow/index.php 
/StackOverflow/content/page1.php 
/StackOverflow/content/page2.php 
/StackOverflow/content/page3.php 

它們將自動與當前域或任何你設置爲<base>前綴。

+0

這對我來說似乎非常基礎,所以我不確定爲什麼我不能把頭繞在它身上。如果我坐在'page1.php'上,然後點擊指向'/ StackOverflow/index.php'的鏈接。瀏覽器如何知道我不打算去'/ StackOverflow/content/StackOverflow/index.php'? – mhopkins321

+0

這會發生,如果你鏈接到StackOverflow/index.php。注意缺少根斜線。 – JimL

+0

您可能會從閱讀這些答案中受益 - http://stackoverflow.com/questions/2005079/absolute-vs-relative-urls –

1

你並不需要絕對的HTTP路徑,它實際上可能有問題,如果您使用HTTPS那些仍然指向HTTP鏈接的任何一個都可能導致瀏覽器顯示一個「不安全內容」的錯誤

// This allows you to deploy to different enviroments where some might 
// have the page _not_ in the site root, without having to edit 
// 1000s of lines of code. 
$config['baseurl'] = '/StackOverflow'; 

// then when you echo an url you can just 
echo $config['baseurl'] . '/content/page1.php'; 
1

始終使用相對URL,以便能夠不僅在服務器之間傳輸站點,還能在同一服務器中的目錄之間傳輸站點。

相對通常從您當前的文件位置開始。通常我有我的index.php包括其他文件。因此,所有這相對於根的位置:

./ means same path 
./test/ means one level up 
../ means 1 level-below 
../../ means 2 levels-below etc 

http://www.webdevelopersnotes.com/design/relative_and_absolute_urls.php3

1

我通常設置了$ baseURL時,在我的應用程序的配置文件指向我的應用程序的根目錄下的$基本路徑變量並在我的前端,我只是用這些變量前綴我的網址。

這樣你就可以從一臺服務器輕鬆地將您的網站到其他,如果你想讓它動態地,你可以像這一點,也與子目錄

1

應用程序的工作原理:

$pathInfo = pathinfo($_SERVER['SCRIPT_NAME']); 
$baseUrl = rtrim($pathInfo['dirname'], "\\/"); 

我將這個baseUrl保存在我的請求對象中,並在我的視圖腳本中使用它。這是給你..

使用方法如下:

<a href="<?php echo $baseUrl; ?>/content/page1.php">Test</a> 

有時候你需要絕對的URL如果您發送一封電子郵件例如,需要回鏈接到該網站:

$rootUrl = 'http'; 
if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') { 
    $rootUrl .= 's'; 
} 
$rootUrl .= '://'.$_SERVER['SERVER_NAME']; 
if ($_SERVER['SERVER_PORT'] != '80') { 
    $rootUrl .= ':'.$_SERVER['SERVER_PORT']; 
} 
$rootUrl .= $baseUrl; 

以與$baseUrl相同的方式使用$rootUrl

1

我總是在配置文件中分配幾個常量,並將所有路徑都基於此。

if ($_SERVER["APP_ENVIRONMENT"] == "development"){ 
    define("BASE_PATH", "C:/sites/StackOverflow/development/"); 
    define("BASE_URL", "/development/"); 
} else { 
    define ("BASE_PATH", "/home/www.mysite.com/htdocs/"); 
    define ("BASE_URL", "/"); 
} 

然後做URL時,我構建了一個類似於

$url = BASE_URL."path/to/whatever.jpg"; 

以及有關文件引用

include (BASE_PATH."libraries/mylib.php"); 

您可以設置$ _ SERVER [ 「APP_ENVIRONMENT」]在htaccess的路徑使用PutEnv的每個環境的基礎

SetEnv APP_ENVIRONMENT development