帝国 CMS 怎么设置 301 重定向
学完这篇,你能在帝国 CMS 里把旧地址正确地 301 到新地址,并且知道哪种情况该用后台设置、哪种情况必须改服务器规则。
第一步:先分清你要重定向的是什么
301 是「永久跳转」,搜索引擎会把旧地址的权重传给新地址。帝国 CMS 里能落地的场景只有三类:
- 整个域名换掉(比如
example.com→www.example.com,或 HTTP → HTTPS) - 某个栏目/某个页面换了地址(栏目改名、目录调整)
- 改版后一批旧文章地址失效(旧 ID 页面对应新静态页)
三类对应的做法完全不同,先对号入座再动手,别一上来就改代码。
第二步:栏目和内容级别的跳转,用后台自带功能
帝国 CMS 后台自带「转向地址」,适合处理单个栏目。入口是:
**后台 → 栏目 → 管理栏目 → 找到目标栏目点「修改」→ 在「基本属性」区域找到「转向地址」输入框,填上新地址(例如 /news/),保存后 后台 → 栏目 → 更新栏目页** 重新生成。
访问这个栏目时就会跳到新地址。
注意:帝国 CMS 这个自带转向默认是 302 临时跳转(部分版本甚至输出的是 meta refresh),不是 301。搜索引擎不会把权重传过去。只做内部引导可以,做 SEO 改版不行。
如果非要把它改成 301,做法是在 e/class/ 目录里全文搜索 header("Location,找到输出跳转的那段,在 Location 之前补一行:
header("HTTP/1.1 301 Moved Permanently");
header("Location: $url");
改完必须重新生成栏目页,并且升级帝国 CMS 时会被覆盖,要留档。
第三步:域名级 301,直接改服务器规则
这是最可靠的做法,和帝国 CMS 版本无关。
Apache 环境,在网站根目录的 .htaccess 里加:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
Nginx 环境,在站点配置里加一个 server 块:
server {
listen 80;
server_name example.com;
return 301 https://www.example.com$request_uri;
}
改完执行 nginx -t 检查语法,再 nginx -s reload。
注意:Nginx 改完配置一定要 reload,光保存文件不生效。Apache 的
.htaccess需要确认站点配置里AllowOverride All,否则规则会被忽略。
第四步:旧文章地址批量 301
帝国 CMS 的动态地址形如 /e/action/ShowInfo.php?classid=1&id=123 或 /plus/view.php?aid=123。这类带查询字符串的地址,.htaccess 里的 Redirect 301 指令匹配不到,必须用 RewriteRule:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^aid=123$
RewriteRule ^plus/view\.php$ https://www.example.com/news/2024/abc.html? [R=301,L]
注意规则末尾那个单独的 ?,它的作用是丢掉原来的查询字符串,不加的话新地址后面会拖一串 ?aid=123。
如果旧地址是帝国 CMS 生成的静态 HTML,直接写就行:
Redirect 301 /old/2020/123.html https://www.example.com/news/2024/abc.html
第五步:验证跳转是不是真 301
别只看浏览器跳没跳,要看状态码。命令行执行:
curl -I "https://www.example.com/old/2020/123.html"
返回第一行必须是 HTTP/1.1 301 Moved Permanently,并且有一行 Location: 新地址。如果返回 302 或者 200,说明规则没生效或写错了。
图形化的办法是 Chrome 按 F12 打开开发者工具 → Network 面板 → 勾选 Preserve log → 访问旧地址 → 看这条请求的 Status 列。
小结
- 先分类:域名级、栏目级、文章级,做法不同
- 帝国 CMS 后台的「转向地址」入口在 栏目 → 管理栏目 → 修改,默认是 302,做 SEO 不够
- 域名级和批量地址的 301,一律改
.htaccess(Apache)或 server 块(Nginx),别依赖 CMS - 带
?参数的旧地址必须用RewriteCond %{QUERY_STRING}匹配,规则末尾加?丢弃原参数 - 改完一定要用
curl -I确认返回的是 301 而不是 302
原文链接:https://www.gj0.com/thread-662.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。