大规模虚拟主机是一个稍微不同的方案,以上述在你通常会用它来托管许多不同的网站,而不是试图使用它的权力的应用程序的问题提出. 我已经在post on my blog中记录了我的基于mod_rewrite的大规模虚拟主机环境,如果你想走这条路,你可以看看。当然,还有相应的Apache手册页。 Apache也有一个处理大规模虚拟主机的内部方法,它比我使用的mod_rewrite方法灵活性稍差一些。这在Apache动态配置的大规模虚拟主机手册页中有详细描述。
首先,您必须使用服务器DNS编辑器创建DNS设置。 1.在DNS设置中创建A记录,在服务器IP地址中使用主机*通配符。 * 1400 IN A ip_address 1.在DNS设置中再次创建一条A记录,服务器IP地址为主机@或domainname.example。tld表示顶级域或域的扩展名,如.com、.org等。 @ 1400 IN A ip_address或domainname.example 1400 IN A ip_address 1.创建CNAME记录,如下所示: www 1400 IN A domainname.example 1.使用*通配符创建子域,如*.domainname.example 1.在您的*.domainname.example子网域目录中建立.htaccess,并放入下列程式码:
9条答案
按热度按时间pkmbmrz71#
快速概览
1.您需要在DNS服务器
*.website.example
上创建一个通配符域1.然后,在您的vhost容器中,您还需要指定通配符
*.website.example
-这在ServerAlias
DOC中完成1.然后提取并验证PHP中的子域,并显示相应的数据
长版本
1.创建通配符DNS条目
在DNS设置中,您需要创建一个wildcard domain entry,例如
*.example.org
。通配符条目如下所示:2.在vhost中包含通配符
接下来,在Apache配置中,您需要设置一个vhost容器,该容器在
ServerAlias
DOCs指令中指定通配符。3.在PHP中计算出您所在的子域
然后在PHP脚本中,你可以通过查看超级全局变量
$_SERVER
来找到这个域。下面是一个在PHP中获取子域的例子:我在这里使用regex来允许人们通过
www.subdomain.example.org
或subdomain.example.org
访问您的网站。如果你从来没有想过要处理www.(或其他子域),那么你可以简单地使用这样的子字符串:
大规模虚拟主机
大规模虚拟主机是一个稍微不同的方案,以上述在你通常会用它来托管许多不同的网站,而不是试图使用它的权力的应用程序的问题提出.
我已经在post on my blog中记录了我的基于mod_rewrite的大规模虚拟主机环境,如果你想走这条路,你可以看看。当然,还有相应的Apache手册页。
Apache也有一个处理大规模虚拟主机的内部方法,它比我使用的mod_rewrite方法灵活性稍差一些。这在Apache动态配置的大规模虚拟主机手册页中有详细描述。
xdyibdwo2#
您可以首先允许每个子域,然后检查子域是否有效。例如:
在
index.php
中,您可以使用以下命令提取子域:但所有这些都要求您的Web服务器接受每个子域名。
20jt8wwn3#
除了设置DNS通配符之外,您可能还想了解一下Dynamic Mass Virtual Hosting for Apache,这是我过去解决此问题的方法
anauzrmj4#
我发现用PHP做起来更容易。实际上就是在cPanel中创建一个子域,然后在所需的域名下创建文件夹。因为你会在cPanel中手动完成,但所有这些都是通过一个简单的PHP函数在毫秒内完成的。不需要点击:)
enyaitl35#
最简单的方法是重定向所有子域(使用通配符 *),使其指向您的/wwwroot。然后使用以下代码将
.htaccess
放入该文件夹:这将实现/wwwroot文件夹的每个子文件夹都通过子域(
foldername.domain.example
)可接受。几年前在http://www.webmasterworld.com/apache/3163397.htm上找到的
cbjzeqam6#
这与. htaccess无关。您需要为子域设置DNS记录和虚拟主机。
vnzz0bqm7#
Mod_vhost_alias是完成此任务的合适模块。
通过一行代码,您可以告诉Apache查看正确的位置,使用目录散列等。例如,以下代码行:
我会告诉Apache在请求
subdomain.yourdomain.example
时将文档根设置为/http/users/s/u/subdomain
wmtdaxz38#
我认为Apache的动态大规模虚拟主机的通配符DNS也是一个合理的解决方案。虽然,我从来没有尝试过。
如果您需要扩展到多个服务器,或者其他解决方案不适合您,我建议您使用数据库驱动的DNS服务器。(或PostgreSQL)你可以用PHP或其他任何东西来动态更新你的DNS。代码看起来不像是有一段时间更新过了,但它是DNS,因此不是最先进的。
watbbzwu9#
通配符子域创建方法
首先,您必须使用服务器DNS编辑器创建DNS设置。
1.在DNS设置中创建
A
记录,在服务器IP地址中使用主机*
通配符。* 1400 IN A ip_address
1.在DNS设置中再次创建一条
A
记录,服务器IP地址为主机@
或domainname.example
。tld表示顶级域或域的扩展名,如.com、.org等。@ 1400 IN A ip_address
或domainname.example 1400 IN A ip_address
1.创建
CNAME
记录,如下所示:www 1400 IN A domainname.example
1.使用
*
通配符创建子域,如*.domainname.example
1.在您的
*.domainname.example
子网域目录中建立.htaccess
,并放入下列程式码:测试第一个通配符子域,如
some.domainname.example
如果您不想使用
.htaccess
将数据作为参数传递,也可以使用以下编码获取数据:并在任何地方使用全局变量,如
global $get_data
。(note:这个类主要用于从
http_host
中获取准确的子域名。因为在您的子域名之前组合的一些额外的名称也是适用的,如www.some.domainname.example
。这个返回$_GET['data']='wwww'
。所以我的建议是使用$_SERVER['http_host']
来获取准确的值,而不是使用$_SERVER['query_string']
或在您的索引页中传递.htaccess
参数)6.加速执行这个通配符子域在TTL-DNS SETTINGS中使用N秒。
7.在指定的ttl时间(600 - 10分钟)后检查子域,如=〉
http://abc.domainname.example
(note:通配符子域不会覆盖现有子域。因为第一优先级始终适用于您现有的子域)