织梦CMS的301重定向主要分为两种情况:

- 域名变更:将
old.com的所有流量永久重定向到new.com。 - 目录/路径变更:将
old.com/category/重定向到new.com/new-category/。
我们将分别介绍这两种情况下的实现方法。
使用 .htaccess 文件(推荐,适用于Apache服务器)
这是最常用、最标准且最有效的方法。.htaccess 是一个隐藏文件,位于你网站的根目录下。
情况1:整个域名重定向(推荐)
将旧域名 old.com 的所有流量(包括所有子目录和文件)301重定向到新域名 new.com。
操作步骤:

-
登录你的网站根目录:通过FTP或主机控制面板的文件管理器,进入网站的根目录(通常是
public_html或www)。 -
找到或创建
.htaccess文件:- 如果已经存在
.htaccess文件,请用文本编辑器(如Notepad++, VS Code)打开它。 - 如果不存在,请创建一个新文件,命名为
.htaccess(注意前面有一个点)。
- 如果已经存在
-
添加以下代码到文件的开头:
# 将 old.com 重定向到 new.com # 请将 old.com 和 new.com 替换为你的实际域名 RewriteEngine on RewriteCond %{HTTP_HOST} ^old.com [NC] RewriteRule ^(.*)$ http://new.com/$1 [L,R=301] -
代码解释:
(图片来源网络,侵删)RewriteEngine on:开启Apache的URL重写引擎。RewriteCond %{HTTP_HOST} ^old.com [NC]:这是一个条件,它检查访问的域名(%{HTTP_HOST})是否是old.com(^表示开头,[NC]表示不区分大小写)。RewriteRule ^(.*)$ http://new.com/$1 [L,R=301]:如果满足上面的条件,则执行重定向规则。^(.*)$:匹配从根目录开始的任意URL路径。http://new.com/$1:将其重定向到new.com的相同路径($1是一个反向引用,代表前面RewriteRule中 匹配到的内容)。[L]:Last Rule,表示如果此规则匹配,则停止处理后续的Rewrite规则。[R=301]:执行一个301(永久移动)重定向。
-
保存并上传:保存文件,并确保通过FTP上传回服务器,覆盖原有的
.htaccess文件。
更完善的写法(带www):
如果你希望强制所有访问都带 www,或者处理 www 和非 www 的统一重定向,可以使用更完善的代码。
# 强制将 old.com 和 www.old.com 统一重定向到 new.com
RewriteEngine on
RewriteCond %{HTTP_HOST} ^old.com [NC,OR]
RewriteCond %{HTTP_HOST} ^www.old.com [NC]
RewriteRule ^(.*)$ http://new.com/$1 [L,R=301]
情况2:特定目录或页面重定向
如果你想将旧站点的某个特定目录或页面重定向到新站点,规则可以更精确。
示例1:将旧目录重定向到新目录
# 将 old.com/blog/ 下的所有请求重定向到 new.com/articles/ RewriteEngine on RewriteRule ^blog/(.*)$ http://new.com/articles/$1 [L,R=301]
访问 http://old.com/blog/post1.html 会重定向到 http://new.com/articles/post1.html。
示例2:将单个页面重定向
# 将 old.com/old-page.html 重定向到 new.com/new-page.html RewriteEngine on RewriteRule ^old-page\.html$ http://new.com/new-page.html [L,R=301]
修改PHP文件(适用于所有服务器,但优先级较低)
如果你的服务器不支持 .htaccess 文件(例如某些Nginx环境配置不当),或者你想直接在代码中控制,可以修改织梦的入口文件 index.php。
操作步骤:
-
登录网站根目录,找到
index.php文件。 -
用文本编辑器打开
index.php。 -
在文件最顶部,
<?php这行代码之后,添加以下PHP代码:<?php // 301重定向示例:将域名从 old.com 重定向到 new.com // 请将 old.com 和 new.com 替换为你的实际域名 if ($_SERVER['HTTP_HOST'] == 'old.com') { header("HTTP/1.1 301 Moved Permanently"); header("Location: http://new.com".$_SERVER['REQUEST_URI']); exit(); } // ... 后面是 index.php 原有的代码 ... require_once (dirname(__FILE__) . "/include/common.inc.php"); require_once DEDEINC."/arc.partview.class.php"; -
代码解释:
if ($_SERVER['HTTP_HOST'] == 'old.com'):检查当前访问的域名是否是old.com。header("HTTP/1.1 301 Moved Permanently");:发送HTTP 301状态码。header("Location: http://new.com".$_SERVER['REQUEST_URI']);:跳转到新域名,并保持原来的请求路径($_SERVER['REQUEST_URI'])。exit();:执行重定向后,立即终止脚本执行,防止后续代码运行。
-
保存文件。
注意:
- 这种方法不如
.htaccess优雅,因为修改了核心文件。 - 织梦系统升级时,这个修改可能会被覆盖,需要重新修改。
- 如果服务器同时支持
.htaccess和PHP重定向,.htaccess的规则通常优先级更高。
针对织梦后台生成的URL进行301重定向(高级场景)
有时,你不想重定向整个域名,而是想将织梦默认生成的URL(如 /a/ 目录下的文章、栏目页)重定向到更友好的自定义URL(如 /article/ 或伪静态后的URL),这种情况比较复杂,通常需要结合织梦的模板修改和 .htaccess 规则来实现。
一个常见的例子:将 /a/ 目录重定向到 /article/
-
确保你在织梦后台已经开启了“伪静态”功能,并配置好了对应的规则。
-
在
.htaccess文件中添加规则,将旧的/a/路径重定向到新的路径。# 将旧的文章目录 /a/ 重定向到新的目录 /article/ # 注意:这只是一个示例,你的新URL结构可能不同 RewriteRule ^a/(.*)$ http://yourdomain.com/article/$1 [L,R=301]
-
或者,更推荐的方法是修改织梦的模板,让它在生成新链接时就使用新的URL结构,而不是先生成旧的URL再重定向,这需要修改织梦的源码或使用自定义标签,难度较大。
重要提醒与验证
-
备份:在修改任何网站文件(特别是
.htaccess和index.php)之前,务必备份原始文件!以防修改出错导致网站无法访问。 -
清除缓存:修改后,清除浏览器缓存和CDN缓存(如果使用了CDN服务),以确保你能看到最新的重定向效果。
-
验证:
- 浏览器测试:在浏览器中访问你的旧URL,查看地址栏是否变成了新的URL,且状态码是否为
301(可以通过浏览器插件如 "Redirect Path" 或 "Check My Redirects" 查看)。 - 命令行测试:使用
curl命令可以更精确地查看HTTP状态码。curl -I http://old.com
如果看到
HTTP/1.1 301 Moved Permanently和Location: http://new.com/,则说明配置成功。
- 浏览器测试:在浏览器中访问你的旧URL,查看地址栏是否变成了新的URL,且状态码是否为
-
SEO影响:301重定向传递权重需要时间,通常搜索引擎需要几周到几个月来完全传递,请耐心等待,并确保重定向是永久性的,不要随意更改重定向目标。
首选 .htaccess 方法,因为它更标准、更灵活,且不涉及修改核心PHP文件,对系统升级也更友好。
