使用 .htaccess (PHP) 动态创建子域
我希望创建一个系统,该系统在注册时将在我的网站上为用户帐户区域创建一个子域。
例如:johndoe.website.example
我认为这与文件有关,并可能重定向到网站上的另一个位置?我其实不知道。但是,任何让我开始的信息将不胜感激。.htaccess
创建注册区域不是问题 - 我已经做了很多次了。我只是不确定从哪里开始使用子域。
我希望创建一个系统,该系统在注册时将在我的网站上为用户帐户区域创建一个子域。
例如:johndoe.website.example
我认为这与文件有关,并可能重定向到网站上的另一个位置?我其实不知道。但是,任何让我开始的信息将不胜感激。.htaccess
创建注册区域不是问题 - 我已经做了很多次了。我只是不确定从哪里开始使用子域。
*.website.example
ServerAlias
DOC 中完成的*.website.example
在 DNS 设置中,您需要创建通配符域条目,例如 。通配符条目如下所示:*.example.org
*.example.org. 3600 A 127.0.0.1
接下来,在 Apache 配置中,您需要设置一个 vhost 容器,该容器在 ServerAlias
DOCs 指令中指定通配符。示例虚拟主机容器:
<VirtualHost *:80>
ServerName server.example.org
ServerAlias *.example.org
UseCanonicalName Off
</VirtualHost>
然后,在 PHP 脚本中,您可以通过查找超级全局变量来查找域。下面是在 PHP 中抓取子域的示例:$_SERVER
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'], '.')
);
大规模虚拟主机与上述方案略有不同,因为您通常会使用它来托管许多不同的网站,而不是像问题所建议的那样尝试使用它来支持应用程序。
我之前在我的博客上的一篇文章中记录了我基于mod_rewrite大规模虚拟主机环境,如果这是您希望采取的路线,您可以查看。当然,还有相应的Apache手册页面。
Apache还有一种处理大规模虚拟主机的内部方式,这种方式比我使用过的mod_rewrite方法的灵活性略低。这一切都在Apache动态配置的大规模虚拟主机手册页面上进行了描述。
您可以首先允许每个子域,然后检查子域是否有效。例如:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^[^.]+\.example\.com$
RewriteRule !^index\.php$ index.php [L]
在里面,你可以比提取子域使用:index.php
if (preg_match('/^([^.]+)\.example\.com$/', $_SERVER['HTTP_HOST'], $match)) {
var_dump($match[1]);
}
但所有这些都需要您的Web服务器接受每个子域名。