如何让PHP为每个用户自动创建子域?

2022-08-30 06:36:13

如何创建子域?我必须以某种方式访问吗?实际上,是否可以简单地通过纯PHP代码创建它,或者我需要使用一些外部脚本服务器端语言?http://user.mywebsite.example.htaccess

对于那些回答的人:那么,我应该问我的主机是否提供某种DNS访问吗?


答案 1

您希望创建自定义 A 记录

我很确定在指定A记录时可以使用通配符,这将允许您执行如下操作:

*.mywebsite.example       IN  A       127.0.0.1

127.0.0.1 将是您的 Web 服务器的 IP 地址。实际添加记录的方法将取决于您的主机。


如果它是一种选择,那么像这样做会更容易设置。http://mywebsite.example/user

然后,您可以添加一个如下所示的文件:.htaccess

Options +FollowSymLinks

RewriteEngine On
RewriteRule ^([aA-zZ])$  dostuff.php?username=$1

在上面,用户名仅限于字符a-z


用于抓取子域的重写规则如下所示:

RewriteCond %{HTTP_HOST} ^(^.*)\.mywebsite.example
RewriteRule (.*)  dostuff.php?username=%1

但是,您实际上并不需要任何重写规则。HTTP_HOST头文件在PHP中也可用,因此您可以获得它,例如

$username = strtok($_SERVER['HTTP_HOST'], ".");

答案 2

您所追求的功能称为通配符子域。它允许您不必为每个子域设置DNS,而是使用Apache重写进行重定向。你可以在这里找到一个很好的教程,但是那里有成千上万的教程。以下是该教程中的必要代码:

<VirtualHost 111.22.33.55>
    DocumentRoot /www/subdomain
    ServerName www.domain.example
    ServerAlias *.domain.example
</VirtualHost>

但是,由于它需要使用VirtualHosts,因此必须在服务器的文件中进行设置,而不是在本地.httpd.conf.htaccess


推荐