欢迎访问艾立兹站 Aliz- 专注建站教程与技术分享
您当前的位置:首页 > 建站教程 > 帝国 CMS 教程

帝国 CMS 自定义英文别名 URL 完整实操教程

时间:2026-08-12 09:45:59  来源:aliz.cn  作者:SKY  阅读:

前言


前面已经讲解过 ID 命名、日期格式、拼音标题文件名三种静态页方案。 拼音 URL 存在缺陷:拼音字符串很长、阅读观感较差;纯 ID 无法从地址分辨文章主题。 很多站长希望自定义简短英文别名,例如 nginx‑301‑guide.html。 帝国 CMS 原生并不支持自定义别名文件名,需要借助自定义字段 + 修改底层命名函数实现,下面开始完整教程。

一、整体实现思路

  1. 在新闻模型新增英文别名字段,后台发布文章时手动填写简短英文标识;
  2. 修改 ReturnInfoFileName() 文件名生成函数,优先读取别名;
  3. 别名为空的时候自动降级采用「拼音 + ID」或者纯 ID;
  4. 更新信息页地址、重建静态文件;
  5. 调整伪静态规则,适配非数字的英文静态地址。

二、新建英文别名自定义字段

  1. 后台依次打开:【系统设置】→【数据表与系统模型】→【管理数据表】
  2. 找到你的资讯模型,一般为新闻数据表 news,点击「管理字段」
  3. 新增字段,参数配置如下

plaintext
字段名:enalias
字段别名:文章英文别名
字段类型:VARCHAR
字段长度:120
表单输入类型:单行文本
  1. 保存,至此发布文章页面多出英文别名输入框。
使用规范:只允许小写英文、数字、短横线,例如 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 地址

  1. 编辑已有文章,按需填充英文别名;
  2. 进入【系统设置】‑【数据更新中心】;
  3. 依次更新栏目缓存 → 更新信息页地址 → 生成全部静态页面。

数据库当中 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。

八、日常使用规范和避坑清单

  1. 别名全部小写,使用短横线 - 分隔单词,禁止下划线、空格、中文;
  2. 别名长度建议控制在 8‑40 字符,不要过于冗长;
  3. 文章别名修改之后 URL 随之变动,修改完毕配置 301 跳转保护权重;
  4. 新文章优先填写别名;别名留空自动启用拼音兜底,不会出现空白文件名;
  5. 静态模式下伪静态修改不会影响,静态 html 文件会直接生成别名名称;

九、SEO 优化建议

  1. 英文别名 URL 适合技术博客站aliz.cn,网址能够体现文章关键词;
  2. 关键词尽量放置在别名当中,例如 nginx‑rewrite‑301‑tutorial
  3. 尽量后期少改动别名,防止频繁更换 URL 造成搜索引擎权重震荡;
  4. URL 改版之后重新生成 sitemap.xml 并且提交站长平台;

十、恢复默认命名


如果后续不再需要英文别名 URL,直接还原 ReturnInfoFileName 原始系统源码,更新信息页地址即可。

结语


自定义英文别名 URL 属于帝国 CMS 比较高级的二次开发,依靠新增自定义字段、改写文件名生成函数就能够实现。 推荐采用「英文别名 + 文章 ID」格式,既能拥有可读性,又能够规避别名重复冲突。 三种 URL 方案(ID、拼音、英文别名)已经全部讲解完毕,可以根据栏目用途,给不同栏目配置不一样的文件名策略。

本文配套模板、静态源码可前往艾立兹素材库alisucai.com下载

发表评论 共有0条评论
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
公众号二维码

扫码关注公众号
获取全套技术教程