你必須理解幾個概念。 一旦服務器接收到的用戶請求的URL,他可以做幾件事情
- 從URL中獲取所請求的路徑,並使用它沒有修改。這是默認解決方案
- 將請求的路徑映射到任何其他物理路徑,這些可以通過Alias,AliasMatch或RewriteRules完成。
- 將請求的路徑映射到另一個網站,同時隱藏了請求另一個網站的事實。這就是代理解決方案,thta的mod_proxy或mod_rewrite的可以處理(但你並不需要一個)
- 將用戶重定向到其他路徑,送他一個新的URL使用,使得其他客戶端/服務器的往返,以重定向指示或mod_rewrite的(瑞士刀)。但你不需要那樣。
所以,你要在服務器端只重映射請求的路徑。
讓我們說我們將使用mod重寫來做這個映射。如果檢查all tags available in RewriteRule(summary 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]
是的,這是可能的。你試過什麼了? –
嗨,我試過RedirectTemp/Redirect,但問題是,用戶在他的瀏覽器地址欄中看到de「id = ...」。你能給我一個「技術術語」給我的例子嗎?然後,我會谷歌。 – John
看看mod_rewrite文檔,特別是在'P'標誌處,它可以讓你在不改變瀏覽器位置的情況下代理修改後的請求。 –