0

我想授予我的每个客户一个子域,以便让他更轻松地访问我的应用程序。

例如,我想

joseph.mysite.com/inex.php 显示在地址栏。而实际页面位置是 www.mysite.com/index.php?customerId=102

同样适用于 joseph.mysite.com/personalArena.php => www.mysite.com/personalArena.php?customerId=102

有没有办法根据用户输入的子域将查询字符串附加到域?

在此先感谢,奥列格。

4

1 回答 1

0

假设您的站点被配置为接受您设置的各种子域(如何配置它可能会有所不同,从ServerAlias在 httpd.conf 的一部分中设置一个VirtualHost,使用 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=XX域的第一部分在哪里......例如: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”,依此类推。

警告:我目前无法尝试此操作,因为我不在可以轻松配置的服务器上。

于 2013-07-08T14:13:20.157 回答