我希望创建一个系统,该系统在注册时将为用户帐户区域在我的网站上创建一个子域。

例如johndoe.website.com

我认为这与 .htaccess 文件有关,并可能重定向到网站上的另一个位置?我其实不知道。但任何让我开始的信息将不胜感激。

创建注册区不是问题 - 我已经做过很多次了。我只是不确定从哪里开始使用子域。

最佳答案

快速破败

  • 您需要在您的 DNS 服务器上创建一个通配符域 *.website.com
  • 然后在您的 vhost 容器中,您还需要指定通配符 *.website.com - 这是在 ServerAlias
  • 中完成的
  • 然后在PHP中提取并验证子域并显示相应的数据

  • 长版

    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/

    10-16 16:15