最近在做以前的网站维护的时候,遇到一个问题:某个项目审核的时候需要查所有的备案域名,要求所有备案的网站必须都能打开,并且在网站底部挂上对应不同的网站备案号。这些不同备案号的网站域名,其实都是绑定在一个阿里云的虚拟空间里的,但是阿里云的虚拟主机又不能绑定子目录,为了省钱我又不能给每个域名都买一个虚拟主机。
要解决这个问题的核心逻辑,其实就是先判断当前访问的是什么域名,然后再加一个判断,为不同的域名输出显示对应的内容即可,可以用php和JS两种方法来实现。
一、PHP实现不同域名显示不同内容
<? //创建域名和对应的数组 $domain_route = array( 'www.xuduoduo.com' => 'a.php', 'www.xuduoduo2.com' => 'b.php', ); //获取当前的域名,如果无效改用$_SERVER['HTTP_HOST']获取当前域名 $domain = $_SERVER['SERVER_NAME']; //解析数组 $target_url = $domain_route[$domain]; //输出 header("location:{$target_url}"); ?>
将上面的代码创建成index.php作为默认首页就可以实现根据不同的域名显示不同的内容了,不过稍微麻烦一点,就是需要另外创建用来显示的页面,比如上面的a.php和b.php两个文件。上面的代码适合用来需要针对不同的网站显示完全不同内容的比较复杂的需求,比如用一个虚拟主机建多个网站这种。
对于我只是要显示不同备案号来说,这样还是稍微复杂了一点,毕竟其实我只要底部的备案号不一样就可以,所以我稍微改了一下:
1、上面array里value本来是要调用的文件,我直接改成了对应的备案号内容;2、在需要显示备案号的地方用
echo $target_url
直接输出显示。
这样就不用另外增加多余的文件了,简单,方便,快捷。
二、用JS实现不同域名显示不同内容
除了上面用PHP的方式,其实也可以用JS来实现。逻辑都是一样,先判断当前访问的域名,然后根据不同的域名来输出不同的内容。
JS代码如下:
<p>©2020 All rights reserved <a href="https://beian.miit.gov.cn" id="beian">备案号</a></p> <script> var domain = window.location.host; if (domain == "www.xuduoduo.com" || domain == "xuduoduo.com") { document.getElementById("beian").innerHTML = "备案号1"; } else if (domain == "www.xuduoduo2.com" || domain == "xuduoduo2.com") { document.getElementById("beian").innerHTML = "备案号2"; } </script>
上面的代码需要注意的两个点:
1、第一行其实是可以删掉的,只要在需要显示备案号的地方,给a标签加上“id=”beian”就可以,ID号的值也可以改,JS代码里记得改成一致就可以;
2、如果有其他的备案号,只要在后面直接追加 else if 即可,但如果每个备案号还有其他域名,只要在domain后面按规律追加即可。
总结
两种实现方法,都挺简单的,原理也都基本上一样,但在操作和效果上会有一点点区别。
1、用PHP实现的话,如果用的CMS之类的框架系统,需要在系统的开发基础上添加代码,可能稍微会复杂一点。但是PHP实现也更加的完美,在前台访问的时候直接能通过HTML代码呈现出来,几乎发现不了使用这种方式来实现的。
2、JS实现在操作上稍微简单一些,不管是手写页面还是有系统框架,都是一段JS代码的事,前端写代码也不用动到后端。但JS实现的缺点就是只能绕过肉眼浏览,如果使用爬虫来抓取页面的代码的话还是没变。