我想授予我的每个客户一个子域名,以便他更方便地访问我的应用程序。
例如,我想
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 :(得分:0)
假设您的网站已配置为接受您设置的各种子域(如何配置此功能可能会有所不同,而不是在httpd.conf的ServerAlias
部分设置VirtualHost
,使用mod_proxy等),然后以下将执行你想要的 part :
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]
应在查询字符串中用“123”替换子域中的“john”,依此类推。
警告:我目前无法尝试,因为我不在服务器上,我可以轻松配置。