2010-12-12 66 views
0

我想將整個站點從一個域重定向到其他域。 我工作時,我宣佈 RewriteRule與R = 301,但用戶可以很容易地注意到, 他被重定向到他的導航欄中的其他網址。 我想要實現的結果是使用遠程服務器顯示內容 與本地服務器保存的url。用htaccess將整個站點重定向到其他域

例如: 用戶類型example1.com,htaccess從example2.com獲取內容 (對於主頁面和example1.com中的每個子頁面)。服務器不會 重定向他的瀏覽器,但只是從example1.com加載遠程數據。

它工作時,我只是使用file_get_contentes('example2.com ...但 問題就來了,如果有一些$ _ POST數據。

回答

2

不回答你的問題,但這種方法是不是最佳的一些原因:

  1. 這取決於服務器往上衝。
  2. 由於請求必須進行兩次,所以速度較慢。
  3. 它佔用了兩倍的帶寬,並且如果您使用PHP腳本,代理服務器上的其他資源。

您確定您要要做到這一點嗎?

如果你真的這麼做了,看看Apache的proxying capabilities,而不是一個PHP腳本,可以處理你所描述的問題(和其他幾個人,例如會話管理,並通過HTTP_REFERERHTTP_USER_AGENT變量)。 Here是一個教程。

請注意,這需要對服務器進行根訪問。

1

你不能做這樣的重定向域跨越只用mod_rewrite的一種重寫規則寫入到一個地址的另一服務器上總是表現得好像它有一個R標誌。

你可能必須使用一些服務器端腳本,不知道如何,但。

2

我不相信這是可能的.htaccess。
你不可以添加example1.com作爲example2.com的httpd.conf中的別名,並將example1.com的DNS記錄更改爲指向與example2.com相同的機器?

這將實現你所追求的目標,並切斷中間人(example1.com的服務器)。

+0

我不能這樣做,導致域指向電子郵件服務器在example1,或者有辦法將example2指向example1的http,但example2的電子郵件服務器? – 2010-12-12 13:26:44

+0

你的意思是發送電子郵件至[email protected]仍然需要前往example1.com服務器?這很好,你可以保持MX記錄仍然指向example1.com服務器的電子郵件仍然去那裏。 – Ben 2010-12-12 13:55:17

3

乾淨的解決方案是讓服務器處理example2.com響應發送到example1.com的請求。通常通過配置Apache虛擬主機來使用ServerName example2.comServerAlias example1.com

如果你做不起這樣做,你應該依靠一個實際的代理和反向代理,而不是用PHP自己做:它更快,並且它能正確處理絕對URL(如果example2.com返回HTML包含<a href="http://example2.com/xxx">?)。 Apache有一個正確的代理和反向代理實現。

0

我解決它使用:

$opts = array('http' => 
    array(
    'method' => 'POST', 
    'header' => 'Content-type: application/x-www-form-urlencoded', 
    'content' => (isset($_POST)) ? http_build_query($_POST) : '', 
) 
); 

$context = stream_context_create($opts); 
$result = file_get_contents('http://example2.com/'.$_SERVER['REQUEST_URI'], false, $context); 

我意識到這是很蹩腳的解決方案,但它工作得很好。

相關問題