帝国 CMS 自定义英文别名 URL 完整实操教程
时间:2026-08-12 09:45:59 来源:aliz.cn 作者:SKY 阅读:
前言
前面已经讲解过 ID 命名、日期格式、拼音标题文件名三种静态页方案。 拼音 URL 存在缺陷:拼音字符串很长、阅读观感较差;纯 ID 无法从地址分辨文章主题。 很多站长希望自定义简短英文别名,例如
nginx‑301‑guide.html。 帝国 CMS 原生并不支持自定义别名文件名,需要借助自定义字段 + 修改底层命名函数实现,下面开始完整教程。
一、整体实现思路
- 在新闻模型新增英文别名字段,后台发布文章时手动填写简短英文标识;
- 修改
ReturnInfoFileName()文件名生成函数,优先读取别名; - 别名为空的时候自动降级采用「拼音 + ID」或者纯 ID;
- 更新信息页地址、重建静态文件;
- 调整伪静态规则,适配非数字的英文静态地址。
二、新建英文别名自定义字段
- 后台依次打开:【系统设置】→【数据表与系统模型】→【管理数据表】
- 找到你的资讯模型,一般为新闻数据表
news,点击「管理字段」 - 新增字段,参数配置如下
plaintext
字段名:enalias
字段别名:文章英文别名
字段类型:VARCHAR
字段长度:120
表单输入类型:单行文本
- 保存,至此发布文章页面多出英文别名输入框。
使用规范:只允许小写英文、数字、短横线,例如 install‑ucenter‑80,不要空格、中文、特殊符号。
三、修改底层文件名生成函数
打开文件:
e/class/functions.php 找到函数 ReturnInfoFileName,替换为下方代码:php
运行
function ReturnInfoFileName($filename,$classid,$id,$title){
//读取当前文章的英文别名
global $empire,$dbtbpre;
$r = $empire->fetch1("select enalias from {$dbtbpre}ecms_news where id='$id'");
//别名不为空则优先使用别名
if(!empty($r['enalias']))
{
$name = strtolower($r['enalias']);
//过滤非法字符
$name = preg_replace('/[^a-z0-9\-]/','',$name);
$name = preg_replace('/-+/','-',$name);
$name = trim($name,'-');
return $name.".html";
}
//别名空缺,降级方案:拼音+id
else
{
$name = strtopinyin($title);
$name = substr($name,0,50);
return $name.'-'.$id.".html";
}
}
如果你上一篇教程已经添加 strtopinyin() 拼音转换函数,则无需重复添加。
可选优化方案:别名‑ID 组合(杜绝重名冲突)
担心多篇文章填写相同别名,可以在别名后方拼接 id,保证唯一性:
php
运行
if(!empty($r['enalias']))
{
$name = strtolower($r['enalias']);
$name = preg_replace('/[^a-z0-9\-]/','',$name);
$name = preg_replace('/-+/','-',$name);
$name = trim($name,'-');
return $name.'-'.$id.".html";
}
四、适配多内容模型
如果你除了 news 新闻表之外还有下载、教程等多个模型表。 需要判断栏目 id,查询对应数据表,示例:
php
运行
function ReturnInfoFileName($filename,$classid,$id,$title){
global $empire,$dbtbpre;
$cr=$empire->fetch1("select tbname from {$dbtbpre}enewsclass where classid='$classid'");
$table = $dbtbpre.'ecms_'.$cr['tbname'];
$r = $empire->fetch1("select enalias from {$table} where id='$id'");
if(!empty($r['enalias']))
{
$name = strtolower($r['enalias']);
$name = preg_replace('/[^a-z0-9\-]/','',$name);
$name = preg_replace('/-+/','-',$name);
$name = trim($name,'-');
return $name.".html";
}else{
$name = strtopinyin($title);
$name = substr($name,0,50);
return $name.'-'.$id.".html";
}
}
五、刷新存量文章 URL 地址
- 编辑已有文章,按需填充英文别名;
- 进入【系统设置】‑【数据更新中心】;
- 依次更新栏目缓存 → 更新信息页地址 → 生成全部静态页面。
数据库当中 filename 字段就会刷新为自定义英文别名名称。
六、修改 Nginx 伪静态规则(重点)
原生帝国 CMS 伪静态只适配数字 ID,现在文件名是英文别名,不能再使用
(\d+) 数字正则。 更换站点 Nginx 配置内的伪静态代码:nginx
location ~ ^/([a-z0-9]+)/([a-z0-9\-]+)\.html$ {
try_files $uri /e/action/ShowInfo.php?classid=$1&alias=$2;
}
接下来修改
e/action/ShowInfo.php 支持别名访问 找到读取资讯的代码,增加别名查询判断:php
运行
if(!empty($alias)){
$r=$empire->fetch1("select id from {$dbtbpre}ecms_news where enalias='$alias'");
$id = $r['id'];
}
七、旧地址 301 永久重定向配置
原先拼音、ID 链接需要跳转至全新英文别名链接; 这里提供通用思路:优先建议别名‑id 结构,依靠 id 编写跳转规则。
nginx
# old: pinyin-126.html 跳转 new: my-alias-126.html
更加稳妥方式:数据库导出旧文件名、新别名对照表,使用 Nginx map 批量 301。
八、日常使用规范和避坑清单
- 别名全部小写,使用短横线
-分隔单词,禁止下划线、空格、中文; - 别名长度建议控制在 8‑40 字符,不要过于冗长;
- 文章别名修改之后 URL 随之变动,修改完毕配置 301 跳转保护权重;
- 新文章优先填写别名;别名留空自动启用拼音兜底,不会出现空白文件名;
- 静态模式下伪静态修改不会影响,静态 html 文件会直接生成别名名称;
九、SEO 优化建议
- 英文别名 URL 适合技术博客站aliz.cn,网址能够体现文章关键词;
- 关键词尽量放置在别名当中,例如
nginx‑rewrite‑301‑tutorial; - 尽量后期少改动别名,防止频繁更换 URL 造成搜索引擎权重震荡;
- URL 改版之后重新生成 sitemap.xml 并且提交站长平台;
十、恢复默认命名
如果后续不再需要英文别名 URL,直接还原
ReturnInfoFileName 原始系统源码,更新信息页地址即可。
结语
自定义英文别名 URL 属于帝国 CMS 比较高级的二次开发,依靠新增自定义字段、改写文件名生成函数就能够实现。 推荐采用「英文别名 + 文章 ID」格式,既能拥有可读性,又能够规避别名重复冲突。 三种 URL 方案(ID、拼音、英文别名)已经全部讲解完毕,可以根据栏目用途,给不同栏目配置不一样的文件名策略。
本文配套模板、静态源码可前往艾立兹素材库alisucai.com下载
发表评论
共有0条评论