2013-07-08 42 views
0

我想授予我的每個客戶一個子域,以便讓他更方便地訪問我的應用程序。ModRewrite顯示子域而不是查詢字符串

例如,我想

joseph.mysite.com/inex.php到地址欄被顯示。 而實際頁面位置是www.mysite.com/index.php?customerId=102

相同爲 joseph.mysite.com/personalArena.php => www.mysite.com/personalArena.php?customerId= 102

是否有任何方法可以將查詢字符串附加到域,具體取決於用戶輸入的子域?

在此先感謝, 奧列格。

+0

這是不可能的,除非你的Apache配置中啓用了mod_proxy – anubhava

+0

我的網站在Linode VPS上運行,我正在閱讀[link](http://httpd.apache.org/docs/ 2.2/mod/mod_proxy.html)模式代理docs權[/ link]現在,假設我將決定爲此目的啓用它,如何實現期望的結果? –

+0

另外如何翻譯'約瑟夫'到'102'? – anubhava

回答

0

使您的網站被配置爲接受你已經設定了不同的子域的假設(如何配置這可以有所不同,從在httpd.conf的VirtualHost一部分,建立一個ServerAlias使用mod_proxy,等等),然後下面將做部分你想要什麼:

RewriteCond %{HTTP_HOST} !^www\.example\.com$ 
RewriteCond %{HTTP_HOST} ^([^\.]+)\.example\.com$ 
RewriteRule (.*)\.php http://www.example.com/$0?cid=%1 [QSA] 

基本上就會重寫任何.PHP請求,並添加?cid=X,其中X是域的第一部分......例如:http://john.example.com/test.php成爲http://www.example.com/test.php?cid=john 。這一點我已經測試,似乎工作(對我來說)。

下一位是將子域映射到用戶ID。有多種方法可以做到這一點,但一個簡單的辦法是有一個文本文件僅列出映射:

john 123 
joseph 102 
oleg 179 

然後,在你httpd.conf(重要 - RewriteMap指令不會.htaccess工作)你定義了這個作爲地圖:

RewriteMap useridmap txt:/path/to/useridmap.txt 

這項工作已經完成,你可以使用映射規則中的之後,例如:

RewriteCond %{HTTP_HOST} !^www\.example\.com$ 
RewriteCond %{HTTP_HOST} ^([^\.]+)\.example\.com$ 
RewriteRule (.*)\.php http://www.example.com/$0?cid=${useridmap:%1} [QSA] 

如若將子域中的「john」替換爲查詢字符串中的「123」,依此類推。

警告:我目前無法試用,因爲我不在可輕鬆配置的服務器上。

相關問題