Subdomain

如何從客戶的域名載入我的應用程序

  • October 28, 2013

我正在建構一個託管在其上的 SAAS 產品,abc.com並且我將很少有具有域client1.comclient2.org的客戶端client3.in

現在我想將我的應用程序提供給他們域上的每個客戶,例如client1.com/appclient2.com/app``client3/com/app

我不想在他們的伺服器上託管我的程式碼。我的網站上只有 1 個基本程式碼和 1 個 DB abc.com。所以我的整個應用程序應該在他們的域上執行

問題是,我該如何配置?我的意思是client.com會指向他們的伺服器,但client.com/app會使用他們自己域的基本 url 從我的伺服器執行我的應用程序?

謝謝..

我能想到的最簡單的方法是使用 mod_proxy (如果在客戶端的域上使用 apache)

http://httpd.apache.org/docs/2.2/mod/mod_proxy.html

另一種方法是讓 php 腳本代理數據:

<?php
$opts = array(
 'http'=>array(
   'method'=>"GET",
   'header'=>"Accept-language: en\r\n" .
             "Cookie: foo=bar\r\n"
 )
);

$context = stream_context_create($opts);1

/* Sends an http request to www.example.com
  with additional headers shown above */
$fp = fopen('http://www.example.com/app?q='.$_GET['q], 'r', false, $context);
fpassthru($fp);
fclose($fp);
?>

如果您可以添加 .htaccess,我建議使用 .htaccess 將應用程序中的所有內容重定向到使用類似於以下內容的內容:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

您可能需要進行一些調整才能使其駐留在 /app 中。然後你的包裝腳本必須學會以不同的方式將 q=$1 變數傳遞給主機。我的範例非常原始,並且沒有檢查錯誤。

我還會為每個站點發送一個帶有域的固定查詢。這樣一來,您的應用程序就可以更輕鬆地破譯它的來源,而不必依賴 IP 地址等。此外,您還必須處理會話,因為所示的包裝器不會將 cookie 一直傳遞到客戶端並返回。而 abc.com 域只會看到託管包裝腳本的伺服器的 IP。

引用自:https://serverfault.com/questions/549120