最近在做一个 SaaS 类型的CMS系统中间用到了每个站长都要用到不同的 robots , sitemap 感觉比较有意思也非常简单特此分享下,上述站点文件如果按照常规的方式直接在站长根目录生成对应的文件就行了,但考虑到是 SaaS 给每个站长生成单独的文件就显然不太现实了,这个时候可以通过路由的方式动态生成 robots , sitemap 站点文件。
因为用的是 thinkphp5 简称 tp5 所以下面用 tp5 框架做下简单的演示
首先我们新建一个控制器 controller 类 robots.php
在 robots.php 控制器中创建 index 方法如下
robots.php
public function index()
{
$site_robots = "User-agent: * \r\n Disallow: "; // 定义robots内容变量
$this->assign('site_robots', $site_robots); // 渲染输入变量
return response($this->fetch(), 200, ['content-type' => '']); // 通过response输入信息
}
这里为什么要使用 response 输出而不直接使用 fetch 渲染输出方法呢主要因为直接使用 fetch 其内容会当做 html 处理而 robots 是要展示成 txt 类型输出的所以说不能直接使用 fetch 输出,而指定 ['content-type' => '']
的 目的也在于此
然后我们对应控制器新建一个HTML页面 robots.html
robots.html
{$site_robots}
就像我们看到的 robots.html 里面什么都不用写直接渲染变量即可
最后我们在 route.php 路由文件中设置下对应的路由即可
route.php
/* robots.txt */
'robots' => ['robots/index', ['method' => 'get', 'ext' => 'txt']],
ok关于动态生成 robots , sitemap 站点文件的思路已经简单实现完成了