---
title: thinkphp5.0制作可以自动更新的网站地图sitemap.xml
description: thinkphp5.0制作一个会自动更新的网站地图sitemap.xml，当发布新的文章之后立即更新sitemap.xml文件。
author: chaihongjun
category: backend
published: 2024-09-02
url: https://chaihongjun.me/backend/23.html
---

# thinkphp5.0制作可以自动更新的网站地图sitemap.xml

制作一个良好的网站地图sitemap.xml有助于帮助搜索引擎爬虫了解我们的网站，从SEO角度考虑，是一个有好处的事情，既然有好处就去试试。当然，为了更方便，每次发布新文章的时候网站地图sitemap.xml都会自动更新一次，保证全部需要的链接都有。

首先，规划路由设计：
MDBLOCK0
当访问"/sitemap.xml"的时候，会访问index模块内的Sitemap控制器其中的index方法。

接着编写这个控制器代码：
MDBLOCK1
这个控制器负责收集全部的链接，然后写入一个xml文件中，考虑到在文章保存的控制器也需要做这些工作，因此把这些工作整合到一个公共方法内，然后再调用即可，这里访问网站地图的URL就调用生成方法，保存文章控制器也会调用。

再继续在公共方法文件common.php内编写generate_sitemap()方法的具体方法体：
MDBLOCK2
上面代码是将全站的URL拼接成xml格式的字符串，注意htmlspecialchars这个php内嵌的函数的使用，这个函数将特殊字符转换为对应的HTML实体，以确保XML的正确性和可读性。XML字符串再返回浏览器。那么获取链接还单独需要一个方法去完成：
MDBLOCK3
还需要一个自定义相应的函数用于处理输出的响应头：
MDBLOCK4
这里根据网站的实际情况去编写,generate_sitemap()要完成的3件事情，其中2个分别又由2个函数实现：

-
 构建xml内容自己完成

-
 xml中的链接由get_site_urls()负责

-
以正确的形式返回响应由responseXML()完成

上面是访问路由地址，完成了sitemap.xml生成，如果需要自动更新，只需要在文件保持控制器中使用generate_sitemap()：
MDBLOCK5
特别需要注意的一点，如果服务器针对.xml文件后缀做了缓存等特殊配置，需要去掉：
MDBLOCK6
不然依然404，依然又有更新，增加了sitemap.txt格式的地图生成，generate_sitemap这个函数稍作修改:
MDBLOCK7

---

> 本文首发于 [chaihongjun.me | 柴宏俊 web 技术学习笔记](https://chaihongjun.me/backend/23.html)，采用 CC BY-NC-ND 4.0 协议，转载请保留出处与链接。
