假设您的站点被配置为接受您设置的各种子域(如何配置它可能会有所不同,从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=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”,依此类推。
警告:我目前无法尝试此操作,因为我不在可以轻松配置的服务器上。