需求:假设一家小公司,申请了域名site.com,但是只有一个虚拟主机空间。为了节约成本,现在希望通过
三个次级域名在上述的虚拟主机空间部署其三个应用:1.针对客户的企业销售系统 2.针对企业内部员工的邮件系统
3.企业销售系统的后台管理系统。(假定访问此三个应用的次级域名分别为:www.site.com、mail.site.com、admin.site.com)
知识点:1. $_SERVER[‘HTTP_HOST’] (当前请求头中的HOST)
2. strpos($haystack, $needle)
本地测试:(Windows 环境下)
1. 设置C:\Windows\system32\drivers\etc\hosts
www.site.com 127.0.0.1
mail.site.com127.0.0.1
admin.site.com127.0.0.1
2. 注意:第一步中,XP操作系统默认情况下在目录C:\Windows\system32\drivers\etc\是看不到hosts文件的
需要取消勾选”我的电脑->工具->文件夹选项->查看->隐藏受保护的操作系统文件”,此时会出现hosts文件
3. XP系统下,该文件属性为”只读”,取消勾选只读属性
并在其中添加如下几项;
4. 项目目录结构如下
/--root
/--siteBranch
|--admin.php
|--mail.php
|--www.php
|--index.php
5. 源代码
/index.php
<?php
$hostInfo = $_SERVER['HTTP_HOST'];
if(strpos($hostInfo, "mail.site.com")!== false ){
<span style="white-space:pre"> </span>header("location:./siteBranch/mail.php");
}else if(strpos($hostInfo,"www.site.com") !==false ){
header("location:./siteBranch/www.php");
}elseif(strpos($hostInfo, "admin.site.com") !==false ){
header("location:./siteBranch/admin.php");
}
?>
/siteBranch/admin.php
<?php
<span style="white-space:pre"> </span>echo "Welcome to admin.site.com";
?>
/siteBranch/mail.php
<?php
echo "Welcome to mail.site.com";
?>
/siteBranch/www.php
<?php
echo "Welcome to www.site.com";
?>
6. 本地测试结果(本地web服务器使用的端口为8090)
在浏览器地址栏中输入www.site.com:8090后输入回车
在浏览器地址栏中输入admin.site.com:8090后输入回车
在浏览器地址栏中输入mail.site.com:8090后输入回车
7. 注意:
本例只用于说明原理。另外判断待查字符串中是否存在字串strpos(),不能将其和0用”>=”做比较,因为false == 0返回true。而false是待查字符串中不包含某字符串的情况