如何自动将子域映射到子文件夹

时间:2014-12-27 22:53:06

标签: php xampp virtualhost

我使用的PHP脚本在注册时为每个用户创建一个子文件夹。例如: domain.com/users/user1

我需要将子域映射到这些子文件夹,例如: user1.domain.com。

我正在使用XAMPP而我已经关注this tutorial并且效果很好。

但我必须为每个用户/子域执行此操作!

我需要在用户注册时自动执行此操作。

4 个答案:

答案 0 :(得分:4)

您想在Apache上进行大规模虚拟主机托管。在这里,您将找到如何执行此操作的信息:

Dynamically configured mass virtual hosting

根据您链接的教程中的示例:

NameVirtualHost *
  <VirtualHost *>
    DocumentRoot "C:\xampp\htdocs"
    ServerName localhost
  </VirtualHost>
  <VirtualHost *>
    DocumentRoot "C:\Documents and Settings\Me\My Documents\clientA\website"
    ServerName clientA.local
  <Directory "C:\Documents and Settings\Me\My Documents\clientA\website">
    Order allow,deny
    Allow from all
  </Directory>
</VirtualHost>
<VirtualHost *>
    DocumentRoot "C:\Documents and Settings\Me\My Documents\clientB\website"
    ServerName clientB.local
  <Directory "C:\Documents and Settings\Me\My Documents\clientB\website">
    Order allow,deny
    Allow from all
  </Directory>
</VirtualHost>

有关此配置的问题是,它是静态的,您需要在更改时重新启动Apache。

首先,您需要DNS服务器中的记录才能将所有子域映射到您的服务器。像这样:

*.local. 3600 IN A x.x.x.x

要在localhost上对此进行测试,您可以手动在hosts文件中设置一些子域。请参阅here为什么无法在hosts文件中设置通配符子域。

不要忘记在httpd.conf中加载vhost_alias_module:

LoadModule vhost_alias_module modules/mod_vhost_alias.so

然后你会替换你的vhost配置,就像这个例子:

<VirtualHost *>
    # get the server name from the Host: header
    UseCanonicalName Off

    # this log format can be split per-virtual-host based on the first field
    LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
    CustomLog logs/access_log vcommon

    # include the server name in the filenames used to satisfy requests
    VirtualDocumentRoot "C:/Documents and Settings/Me/My Documents/%1/website"

    <Directory "C:/Documents and Settings/Me/My Documents/*/website">
        Options Indexes FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
        Require all granted
        DirectoryIndex  index.php index.html index.htm
    </Directory>
</VirtualHost>

这将使用通配符来设置所请求的子域的文档根目录。

答案 1 :(得分:1)

我已经通过在我的服务器上使用默认的vhost实现了类似的功能。假设您已设置dns以便所有子域指向相应的IP地址,那么它们都应解析为默认的vhost。默认vhost指向的文件夹也需要有一个index.php文件,该文件利用子域来提供适当的内容。

您可以通过编辑/ etc / hosts文件并将本地dns中的子域指向localhost,在本地使用XAMPP进行复制。将您的webroot设置为index.php文件所在的位置,并从$ _SERVER变量中获取域名。从那里,您可以通过子域确定用户并以编程方式显示内容。

答案 2 :(得分:1)

您可以安装web hosting control panel PleskWebmin来为您承担这项工作。您将使用友好的GUI来配置子域,并且所有细节配置都将在后台进行。这就是现实世界托管服务提供商所使用的。

答案 3 :(得分:0)

我一直在考虑这个问题但从未测试过。 我认为你应该尝试与CodeIgniter

等一些MVC框架相同的方法

使用index.php路由所有请求。 获取$ _SERVER [“HTTP_HOST”]并解析它以获取您的子域。 现在取决于你的子域加载相应的视图(在MVC中查看)