什么是301重定向?
301重定向是一种永久性的网页跳转,当搜索引擎或用户访问一个旧URL时,服务器会自动将其引导到新的URL,并且告诉搜索引擎“这个页面已经永久搬家了,请把旧URL的权重和排名都传递给新URL”。

这对于SEO至关重要,可以避免因URL变更(如改版、更换域名、URL规范化)导致的流量和排名损失。
织梦网站301重定向的常见场景
- 域名更换:从
olddomain.com迁移到newdomain.com。 - URL规范化:强制将带
www的域名(如www.example.com)重定向到不带www的(如example.com),或者反之。 - HTTP升级到HTTPS:将所有HTTP流量强制跳转到HTTPS。
- 目录或页面变更:将
/old-category/目录下的所有页面永久重定向到/new-category/。 - 移动端适配:将旧版手机站URL重定向到新版响应式URL或新的手机域名。
织梦301重定向的几种方法(按推荐顺序)
使用服务器配置文件(最推荐、最彻底)
这是最标准、最有效的方法,因为它在请求到达PHP程序之前就完成了重定向,效率最高,也最符合搜索引擎的期望。
Apache服务器
如果你使用的是Apache服务器,并且开启了 mod_rewrite 模块(虚拟主机一般都默认开启),请按以下步骤操作:
步骤1:找到并编辑 .htaccess 文件

织梦程序的根目录下通常有一个名为 .htaccess 文件,如果没有,你需要手动创建一个。
步骤2:在 .htaccess 文件中添加重定向规则
根据你的需求,在文件顶部添加相应的代码。
场景A:将带www的域名重定向到不带www的域名

# 将 www.example.com 重定向到 example.com
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]
场景B:将不带www的域名重定向到带www的域名
# 将 example.com 重定向到 www.example.com
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
场景C:将HTTP重定向到HTTPS(推荐同时处理带www和不带www的情况)
# 将所有HTTP请求重定向到HTTPS
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
场景D:同时处理HTTP到HTTPS和域名规范化(不带www -> 带www)
这是一个非常常见的组合,代码可以这样写:
# 强制使用HTTPS和带www的域名
RewriteEngine On
# 1. 如果不是HTTPS,则重定向到HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# 2. 如果是HTTPS但不带www,则重定向到带www的HTTPS
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]
场景E:更换域名(olddomain.com -> newdomain.com)
# 将 olddomain.com 的所有内容重定向到 newdomain.com
RewriteEngine On
RewriteCond %{HTTP_HOST} ^olddomain\.com [NC,OR]
RewriteCond %{HTTP_HOST} ^www\.olddomain\.com [NC]
RewriteRule ^(.*)$ https://newdomain.com/$1 [L,R=301]
Nginx服务器
如果你使用的是Nginx,请编辑网站的配置文件(通常在 /usr/local/nginx/conf/vhost/ 目录下,文件名是你的域名.conf)。
步骤1:找到并编辑服务器配置文件
步骤2:在 server 块中添加重定向规则
场景A:将带www的域名重定向到不带www的域名
server {
listen 80;
server_name www.example.com;
# 将 www.example.com 的所有请求重定向到 example.com
return 301 http://example.com$request_uri;
}
server {
listen 80;
server_name example.com;
# 这里是你网站的正常配置...
root /home/wwwroot/example.com;
index index.php index.html;
# ... 其他配置
}
场景B:将HTTP重定向到HTTPS
# 处理HTTP请求,强制跳转到HTTPS
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
# 处理HTTPS请求
server {
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /path/to/your/fullchain.pem;
ssl_certificate_key /path/to/your/private.key;
# 这里是你网站的正常HTTPS配置...
root /home/wwwroot/example.com;
index index.php index.html;
# ... 其他配置
}
场景C:更换域名
server {
listen 80;
server_name olddomain.com www.olddomain.com;
return 301 https://newdomain.com$request_uri;
}
修改织梦程序文件(适用于无法修改服务器配置的情况)
如果你无法访问服务器配置文件(如使用虚拟主机且没有 .htaccess 权限),可以通过修改织梦的核心文件来实现。
注意: 此方法在PHP层面执行,效率略低于服务器配置,且织梦升级后可能需要重新修改。
步骤1:找到并修改 index.php 文件
打开织梦网站根目录下的 index.php 文件。
步骤2:在文件开头添加重定向代码
在 <?php 这行代码之后,其他代码之前,添加你的重定向逻辑。
示例:强制HTTPS和带www域名
<?php
// -------------------------- 在这里添加重定向代码 --------------------------
// 获取当前域名和协议
$host = $_SERVER['HTTP_HOST'];
$protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https' : 'http';
// 规则1:如果不是HTTPS,则重定向到HTTPS
if ($protocol == 'http') {
$new_url = 'https://' . $host . $_SERVER['REQUEST_URI'];
header("HTTP/1.1 301 Moved Permanently");
header("Location: $new_url");
exit();
}
// 规则2:如果是HTTPS但不带www,则重定向到带www的HTTPS
if (strpos($host, 'www.') !== 0) {
$new_url = 'https://www.' . $host . $_SERVER['REQUEST_URI'];
header("HTTP/1.1 301 Moved Permanently");
header("Location: $new_url");
exit();
}
// -------------------------- 重定向代码结束 --------------------------
require_once (dirname(__FILE__) . "/include/common.inc.php");
require_once DEDEINC."/arc.partview.class.php";
$GLOBALS['arcs'] = array();
$row = $dsql->GetOne("Select * From `dede_homepageset`");
$row['templet'] = MfTemplet($row['templet']);
$pv = new PartView();
$pv->SetTemplet($cfg_basedir . $cfg_templets_dir . "/" . $row['templet']);
$pv->Display();
?>
说明:
header("Location: $new_url");执行跳转。exit();或die();在执行跳转后终止脚本执行,非常重要。- 这种方法虽然可以实现,但不如服务器配置文件来得干净利落,且只在首页入口生效,对于直接访问子页面(如
about.php)的情况可能需要额外处理。
使用织梦后台的“自定义404页面”(不推荐用于301)
织梦后台有一个“自定义404页面”功能,但这个功能是用来处理“页面不存在”的情况(返回404状态码),不适合用来做301永久重定向,错误使用会导致SEO问题,请务必不要混淆。
验证301重定向是否生效
设置完成后,必须进行验证,确保重定向正确且返回了301状态码。
-
使用在线工具
- 访问 SEO综合查询工具。
- 输入你的旧URL,
http://www.example.com/old-page.html。 - 查看结果,在“状态码”一栏,应该显示
301,跳转URL”一栏会显示你的新URL,https://www.example.com/new-page.html。
-
使用浏览器开发者工具
- 按
F12打开开发者工具,切换到 “Network”(网络)选项卡。 - 勾选 “Disable cache”(禁用缓存)。
- 在浏览器地址栏输入旧URL并回车。
- 在网络请求列表中找到对应的请求,点击查看详情。
- 在 “Headers”(标头)选项卡中,找到 “Status Code”,它应该显示
301 Moved Permanently。
- 按
-
使用命令行工具(高级用户)
- 在Linux或macOS终端中使用
curl命令:curl -I http://www.example.com/old-page.html
- 在Windows的命令提示符中使用:
curl -I http://www.example.com/old-page.html
- 查看输出结果,找到
HTTP/1.1 301 Moved Permanently这一行。
- 在Linux或macOS终端中使用
总结与建议
| 方法 | 优点 | 缺点 | 推荐场景 |
|---|---|---|---|
| 服务器配置 | 效率最高、最标准、最稳定、SEO友好 | 需要服务器管理权限 | 所有场景,尤其是域名更换和HTTPS升级 |
| 修改程序文件 | 无需服务器权限,逻辑灵活 | 效率较低,升级后可能失效,不易维护 | 无法修改服务器配置时的临时方案或特定需求 |
最佳实践:
- 首选服务器配置文件(
.htaccess或 Nginx 配置),这是最专业、最可靠的方法。 - 对于域名更换,请务必将所有旧域名(带www和不带www)以及HTTP版本都重定向到新域名的HTTPS版本。
- 设置完成后,务必使用工具进行验证,确保状态码为301。
- 重定向设置生效后,保持一段时间(如几个月),以便搜索引擎充分传递权重,之后可以在Google Search Console和Bing Webmaster Tools中提交更改通知。
希望这份详细的指南能帮助你成功完成织梦网站的301重定向!
