如题,客户说希望URL地址就是发布文章的标题。这是一个奇怪的需求。
为什么说奇怪了,
标题变化带来的URL变化问题
如果标题改了,URL也得改,导致旧URL失效,造成死链,影响SEO,除非做好301重定向。
标题过长或含特殊字符影响URL
标题可能过长,含空格、标点符号等,需要做良好slug化处理,否则URL会显得冗长或混乱。
重复标题可能导致重复URL
不同文章标题重复时,URL冲突,需要额外机制避免重复(如加数字后缀)。
隐私及安全考虑
有些标题可能暴露敏感信息,直接作为URL可能带来风险(视内容而定)。
URL稳定性
URL最好是稳定不变的,频繁根据标题变动会影响SEO权重的积累。
都2025年了,SEO对纯技术上的要求并不高,内容为王的时候,还在去做技术层面的东西,实在没有必要。
我的一个网站用7天时间就上了谷歌首页,至今已经5年左右了。排名没有掉过。当时做的时候从来没有去考虑过SEO方面的问题,只是精心设计了一下首页的TDK,然后连续发了一周的文章,排名就上去了,后面就再也没有管过那个网站,排名一直在首页前三。
甚至从很多所谓的SEO优化者的角度来看,我的那个站可能SEO打分的话,最多40分,因为我在做那个站的时候,时间很匆忙,做网站只用了一天,然后什么title, Alt, h2标签,这些在SEO人员眼中很神奇的东西,我完全没有考虑过。
话不多说了,开工。
文章详情的话是由:ContentController.php控制器管理的。所以我们打开这个文章,添加了个过滤的函数。
/*** 将字符串转换为URL友好的slug格式 20250626 ,小宝*/ private function slugifyadd($text) { // 先把 HTML 实体转换为对应字符 $text = html_entity_decode($text, ENT_QUOTES | ENT_HTML5, 'UTF-8'); // 替换非字母数字字符为横线(此时单引号是字符 ',会被替换成横线) $text = preg_replace('/[^A-Za-z0-9]+/u', '-', $text); // 合并多个横线为一个 $text = preg_replace('/-+/', '-', $text); // 去掉首尾横线 $text = trim($text, '-'); // 转成小写(可选) // $text = strtolower($text); return $text ?: 'n-a'; }
然后我们在文章增加的函数中
// 文章增加 public function add() { if ($_POST) { // 获取数据 $scode = post('scode'); $subscode = post('subscode'); $title = post('title'); $titlecolor = post('titlecolor'); $subtitle = post('subtitle'); $filename = trim(post('filename'), '/'); $author = post('author'); $source = post('source') ?: '本站'; $outlink = post('outlink'); $date = post('date'); $ico = post('ico'); $pics = post('pics');
可以看到有这样一行代码, filename就是网站的URL地址。
$filename = trim(post('filename'), '/');
然后我们将他修改成:
$filename = $this->slugifyadd($title);
在后面的文章修改中也有同样的一处。
// 文章修改 public function mod()
在这个函数中,也同样修改一下。
这样就实现了发布新闻或者修改文章的时候,URL地址就自动获取标题并过滤掉符号后用横线连接成URL。
如果我们想保留这个功能,又想自定义URL怎么办呢?
我们可以改成这样
// filename允许用户手动填写,若为空则用title生成slug $filename = trim(post('filename'), '/'); if (!$filename && $title) { $filename = $this->slugifyadd($title); // 调用同一个函数 }
这样的话,如果用户发布文章的时候,可以自定义URL地址,此时就不会读取标题作为URL了。
如果需要用标题作为URL就需要删除掉URL中的自定义地址。
这就有一个问题就是,如果我发布了一篇文章,他会生成一个URL地址并写入到filename中,当我想必这篇文章的时候,标题我是修改了,实际上URL处会有这前的标题生成的URL,此时如果不删除掉之前生成的URL,那么修改文章后,就不会生成新的标题URL,就还会是原来的标题生成的URL。
而上面一开始的那种方法 ,就是不管是新增和修改,都是读取最新的标题作为URL的。
如题,客户说希望URL地址就是发布文章的标题。这是一个奇怪的需求。为什么说奇怪了,标题变化带来的URL变化...
如题:客户提出这样一个奇怪的需求。自动获取网页内容中的h2标签并添加到侧边栏作为定位,然后点击侧边栏的...
PBOOTCMS在运行时间久了之后,有可能会造成服务器卡顿。通过慢日志发现,是file.php中的path_delete() 函数...
webp能将原图压缩30%左右还能保持清楚。所以正在被越来越多的人喜欢。pb要增这个功能,第一步:找到ueditor...