做网站、搭博客、写后台管理,经常遇到一个问题:点开一篇文章,地址栏里是 /post?id=123 这种带问号和数字的链接,看着乱、不好记,还影响分享。其实只要改几行配置,就能让它变成 /article/如何设置链接生成规则 这样清爽又友好的形式——这就是链接生成规则在起作用。
先搞懂:链接生成规则到底管啥?
它不是浏览器的事,也不是服务器自动决定的,而是你用的程序(比如 WordPress、Typecho、Hexo、或者自己写的 PHP/Python 后台)在生成页面 URL 时,按你定的「模板」来拼出来的。比如:
文章ID → /post/{id}
文章标题 → /article/{slug}
分类+年份 → /category/{cat}/{year}/{post-slug}
这里的 {id}、{slug}、{cat} 就是变量,后面填什么、怎么组合,全由你定。
常见平台怎么设?
WordPress:进「设置 → 固定链接」,选「文章名」就直接启用 /hello-world/ 形式;想更细控,点「自定义结构」,输入:
/blog/%year%/%monthnum%/%postname%/保存后,新文章链接就变成 /blog/2024/04/链接生成规则怎么设置。
Typecho:后台 → 设置 → 永久链接,勾选「启用地址重写」,再填自定义格式,例如:
/archives/{cid}.html或更直观的:/post/{slug}.html注意:得确保服务器支持 rewrite(Nginx 要加 location 规则,Apache 要开启 .htaccess)。
Hexo 静态博客:打开 _config.yml,找到 permalink: 这一行,改成:
permalink: article/:title/生成后就是 /article/链接生成规则怎么设置/。还可以加日期:permalink: :year/:month/:day/:title/
自己写后台?PHP 举个真例子
假设你用原生 PHP 做个小 CMS,文章列表页要生成链接,别硬写 ?id=45,改用函数统一处理:
function generatePostUrl($title, $id) {
$slug = preg_replace('/[^a-z0-9\-]+/', '-', strtolower($title));
return '/article/' . trim($slug, '-') . '-' . $id;
}
// 调用:generatePostUrl('链接生成规则怎么设置', 45);
// 输出:/article/链接生成规则怎么设置-45
这样既保留 ID 防重复,又让标题可读,搜索引擎也认。
小提醒:设完别忘两件事
一是检查服务器是否生效:如果点了新链接报 404,大概率是 Nginx 或 Apache 没配 rewrite 规则;二是旧链接别丢——上线前用 301 跳转把老 ?id=xxx 地址导到新地址,不然收藏夹和百度快照就断了。