mod_rewrite复杂性问题

时间:2009-09-28 21:15:01

标签: .htaccess mod-rewrite subdomain

我需要根据子域修改我的域名...有两种情况我需要这样做:

  1. 我的网站位于不同的城市...所以losangeles.example.com应该本地化为洛杉矶等...基本上重写为www.example.com/?loc=losangeles

    < / LI>
  2. 我想允许用户创建username.example.com以便轻松地将他们的个人资料传递给朋友...基本上重写为www.example.com/user.php?id=username

    < / LI>

    随着我的网站扩展,我计划拥有超过300个位置,以及数千名用户......这意味着手动编码每个重写规则将会有点单调乏味。

    如何告诉mod-rewrite在位置子域和用户名子域之间进行解密?

1 个答案:

答案 0 :(得分:2)

我认为从根本上说,你需要重新考虑这个策略,因为混合你的命名空间会在长期内引起很多麻烦。如果您错过了城市名称,例如alexandra.example.com但用户已注册该用户名,请考虑会发生什么?此外,您最终将不得不做一些事情,例如在尝试创建用户名时检查城市是否存在。

如果你真的想坚持这一点,一种可能性就是将请求发送到一个点,然后对你的两个数据库进行查找,然后在内部设置$ city或$ user的变量。

设置DNS通配符后,在Apache集中:

ServerAlias *.example.com

然后你的virtualHost的其余部分正常。

然后在应用程序中,只需检查$ _SERVER ['SERVER_NAME'],例如

$server_name = addslashes($_SERVER['SERVER_NAME']);    
$query = "select * from instances where '{$server_name}' regexp replace(concat(server, '$'),'.','\.') limit 1";

但是你实际上必须有两个查询和额外的逻辑来分开两个命名空间或处理冲突情况。

我会使用像

这样的命名空间
<cityname>.example.com/user/<username>

可以避免这些问题,也意味着您可以自定义用户主页上显示的内容,具体取决于您输入的城市,如果需要的话。