2012-12-12 72 views
2

以下可能嗎?apache重定向/ Rewrite-Engine

  1. 用戶請求的URL http://example1.com/example.php和Apache打開http:// example1.com/example.php?id=1

  2. 用戶請求的URL http://example2.com/example.php和Apache打開http:// example2.com/example.php?id=2

但用戶不應該看到的ID在他的瀏覽器地址欄(用戶只能看到http://example1.com/example.phphttp://example2.com/example.php)。

你可以說這個ID對用戶是不可見的,但是被轉移到了example.php

我該如何執行此操作?

+1

是的,這是可能的。你試過什麼了? –

+0

嗨,我試過RedirectTemp/Redirect,但問題是,用戶在他的瀏覽器地址欄中看到de「id = ...」。你能給我一個「技術術語」給我的例子嗎?然後,我會谷歌。 – John

+0

看看mod_rewrite文檔,特別是在'P'標誌處,它可以讓你在不改變瀏覽器位置的情況下代理修改後的請求。 –

回答

0

這是正確的解決方案嗎?

RewriteEngine On 
RewriteRule ^/example.php http://example1.com/example.php$1 [P] 
ProxyPassReverse /example.php?id=1 http:// example1.com/example.php 

RewriteEngine On 
RewriteRule ^/example.php http://example2.com/example.php$1 [P] 
ProxyPassReverse /example.php?id=2 http:// example2.com/example.php 
+0

根據你對你要做的事情的描述,這是行不通的。你不會通過複製和粘貼找到確切的答案。你將不得不閱讀文檔並做一些測試。注意'$ 1'以及它如何設置... –

0

你必須理解幾個概念。 一旦服務器接收到的用戶請求的URL,他可以做幾件事情

  • 從URL中獲取所請求的路徑,並使用它沒有修改。這是默認解決方案
  • 將請求的路徑映射到任何其他物理路徑,這些可以通過Alias,AliasMatch或RewriteRules完成。
  • 將請求的路徑映射到另一個網站,同時隱藏了請求另一個網站的事實。這就是代理解決方案,thta的mod_proxy或mod_rewrite的可以處理(但你並不需要一個)
  • 將用戶重定向到其他路徑,送他一個新的URL使用,使得其他客戶端/服務器的往返,以重定向指示或mod_rewrite的(瑞士刀)。但你不需要那樣。

所以,你要在服務器端只重映射請求的路徑。

讓我們說我們將使用mod重寫來做這個映射。如果檢查all tags available in RewriteRulesummary here)有趣的是:

直通| PT:力所產生的URI被傳遞迴URL映射引擎爲其他URI到文件名翻譯器的處理,如別名或重定向。

qsappend | QSA:追加從原始請求URL的查詢字符串中重寫目標創建的任何查詢字符串

最後| L:停止重寫的過程立刻不適用任何更多規則。特別注意每個目錄和.htaccess上下文的注意事項(另請參閱END標誌)

nocase | NC:使模式比較不區分大小寫。在PT標誌

細節示出了:在一重寫規則

目標(或替換字符串)被假定爲一個文件路徑,默認情況下。

那麼,這對你來說可能就夠了。但是使用PT是一件好事,如果你有其他的apache configusation元素,你應該嘗試讓它們在mod_rewrite作業之後應用。

因此......假設您可能需要處理一些查詢字符串參數,並且此id參數基於請求中的域名,並且只有example.php腳本需要此行爲;你應該從這些規則開始研究(未經測試):

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^example1.com$ [nocase] 
RewriteRule ^example\.php$ example.php?id=1 [passthrough,qsappend,last] 
RewriteCond %{HTTP_HOST} ^example2.com$ [nocase] 
RewriteRule ^example\.php$ example.php?id=2 [passthrough,qsappend,last]