我使用的PHP脚本在注册时为每个用户创建一个子文件夹。例如: domain.com/users/user1
我需要将子域映射到这些子文件夹,例如: user1.domain.com。
我正在使用XAMPP而我已经关注this tutorial并且效果很好。
但我必须为每个用户/子域执行此操作!
我需要在用户注册时自动执行此操作。
答案 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 Plesk或Webmin来为您承担这项工作。您将使用友好的GUI来配置子域,并且所有细节配置都将在后台进行。这就是现实世界托管服务提供商所使用的。
答案 3 :(得分:0)
我一直在考虑这个问题但从未测试过。 我认为你应该尝试与CodeIgniter
等一些MVC框架相同的方法使用index.php路由所有请求。 获取$ _SERVER [“HTTP_HOST”]并解析它以获取您的子域。 现在取决于你的子域加载相应的视图(在MVC中查看)