我希望创建一个系统,该系统在注册时将为用户帐户区域在我的网站上创建一个子域。
例如johndoe.website.com
我认为这与 .htaccess 文件有关,并可能重定向到网站上的另一个位置?我其实不知道。但任何让我开始的信息将不胜感激。
创建注册区不是问题 - 我已经做过很多次了。我只是不确定从哪里开始使用子域。
最佳答案
快速破败
ServerAlias
长版
1. 创建通配符 DNS 条目
在您的 DNS 设置中,您需要创建一个 wildcard domain entry 例如
*.example.org
。通配符条目如下所示:*.example.org. 3600 A 127.0.0.1
2.在vhost中包含通配符
接下来在 Apache 配置中,您需要设置一个 vhost 容器,该容器在
ServerAlias
指令中指定通配符。一个示例 vhost 容器:<VirtualHost *:80>
ServerName server.example.org
ServerAlias *.example.org
UseCanonicalName Off
</VirtualHost>
3. 找出你在 PHP 中的子域
然后在您的 PHP 脚本中,您可以通过查看
$_SERVER
super 全局变量来找出域。这是在 PHP 中抓取子域的示例:preg_match('/([^.]+)\.example\.org/', $_SERVER['SERVER_NAME'], $matches);
if(isset($matches[1])) {
$subdomain = $matches[1];
}
我在这里使用了正则表达式来允许人们通过 www.subdomain.example.org 或 subdomain.example.org 访问您的网站。
如果您从未预料到必须处理 www. (或其他子域)然后您可以简单地使用子字符串,如下所示:
$subdomain = substr(
$_SERVER['SERVER_NAME'], 0,
strpos($_SERVER['SERVER_NAME'], '.')
);
海量虚拟主机
大规模虚拟主机与上述方案略有不同,因为您通常会使用它来托管许多不同的网站,而不是像问题所建议的那样尝试使用它来为应用程序提供动力。
我之前在 post on my blog 中记录了我的基于 mod_rewrite 的大规模虚拟托管环境,您可以查看它是否是您希望采用的路线。当然,还有 respective Apache manual page 。
Apache 也有一种处理大量虚拟主机的内部方法,它比我使用的 mod_rewrite 方法稍微不那么灵活。这在 Apache Dynamically Configured Mass Virtual Hosting manual page 上都有描述。
关于php - 使用 .htaccess (PHP) 即时创建子域,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/586129/