dede文章路径变了,301跳转怎么做?

99ANYc3cd6
预计阅读时长 19 分钟
位置: 首页 DEDE建站 正文

第一步:确定你的新旧路径规则

在实施跳转之前,你必须明确旧路径和新路径的规则,常见的路径变更场景有:

dede文章页路径变了如何做301跳转
(图片来源网络,侵删)
  1. 目录变更

    • 旧: /a/2025/12345.html
    • 新: /article/2025/12345.html
  2. ID变更

    • 旧: /a/2025/12345.html
    • 新: /a/2025/54321.html
  3. URL静态化规则变更

    • 旧: /plus/view.php?aid=12345
    • 新: /a/2025/12345.html
  4. /目录结构变更

    dede文章页路径变了如何做301跳转
    (图片来源网络,侵删)
    • 旧: /a/2025/tech/12345.html
    • 新: /a/2025/news/12345.html
  5. 更换域名

    • 旧: www.old-domain.com/a/2025/12345.html
    • 新: www.new-domain.com/a/2025/12345.html

第二步:选择并实施301跳转方案

以下是几种主流的跳转方案,推荐优先使用 Nginx服务器配置Apache服务器配置,因为它们效率最高。

使用服务器配置文件(推荐)

这是最专业、最稳定、对SEO最友好的方法,你需要修改服务器的配置文件,然后重启服务。

A. Nginx 服务器配置

如果你的网站运行在Nginx上,修改你的虚拟主机配置文件(通常在 /etc/nginx/sites-available/ 目录下)。

dede文章页路径变了如何做301跳转
(图片来源网络,侵删)

场景1:路径前缀/目录变更 所有旧路径 /a/ 下的文章,现在在 /article/ 下。

server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;
    # ... 其他配置 ...
    # 将旧目录 /a/ 的请求重定向到新目录 /article/
    location ^~ /a/ {
        # $request_uri 变量包含了完整的原始请求路径,如 /a/2025/12345.html
        # regex_replace 是Nginx的一个第三方模块,如果你的Nginx没有,需要先安装
        # 或者使用更通用的方法(见下文)
        # 如果你安装了 ngx_http_replace_module,可以这样用:
        # rewrite ^/a/(.*)$ /article/$1 permanent;
        # 如果没有第三方模块,使用更通用的方法(需要拼接)
        # 假设你的网站根目录是 /var/www/html
        # 这种方法效率稍低,但兼容性好
        rewrite ^/a/(.*)$ /article/$1 permanent;
    }
    # ... 其他配置 ...
}

重启Nginx: sudo systemctl restart nginx

场景2:更换域名

server {
    listen 80;
    server_name old-domain.com www.old-domain.com;
    # 将整个域名的所有请求都301跳转到新域名
    return 301 $scheme://www.new-domain.com$request_uri;
}

重启Nginx: sudo systemctl restart nginx

B. Apache 服务器配置

如果你的网站运行在Apache上,修改你的虚拟主机配置文件(通常在 /etc/apache2/sites-available/ 目录下)或者创建/修改 .htaccess 文件。

方法1:在虚拟主机配置中修改(推荐)

<VirtualHost *:80>
    ServerName yourdomain.com
    ServerAlias www.yourdomain.com
    # ... 其他配置 ...
    # 将旧目录 /a/ 的请求重定向到新目录 /article/
    # [NC] 表示不区分大小写
    # [L] 表示这是最后一条规则
    # [R=301] 表示进行301永久重定向
    RedirectMatch 301 ^/a/(.*)$ /article/$1
    # ... 其他配置 ...
</VirtualHost>

方法2:在网站根目录的 .htaccess 文件中修改 这是最简单的方法,尤其适合没有服务器管理权限的用户。

打开网站根目录下的 .htaccess 文件,在 RewriteEngine on 这行下面添加你的规则。

# 确保 RewriteEngine 已经开启
RewriteEngine on
# 场景1:目录变更
# 将 /a/ 开头的所有请求,重定向到 /article/ 下
RewriteRule ^a/(.*)$ /article/$1 [R=301,L]
# 场景2:更换域名
# 将所有请求都重定向到新域名
# RewriteCond %{HTTP_HOST} ^old-domain.com [NC,OR]
# RewriteCond %{HTTP_HOST} ^www.old-domain.com [NC]
# RewriteRule ^(.*)$ http://www.new-domain.com/$1 [L,R=301]

重启Apache: sudo systemctl restart apache2


使用PHP代码实现(不推荐,但可用)

如果你无法修改服务器配置,可以在旧的文章页面模板(通常是 /templets/default/article_article.htm)的顶部加入PHP代码。注意:这必须在任何HTML输出之前执行

<?php
// 在文件最顶部,加入以下代码
// 1. 获取当前文章ID
$aid = isset($arcID) ? $arcID : (isset($id) ? $id : 0);
// 2. 根据旧ID查询数据库,获取新路径
// !!! 注意:请根据你的实际情况修改数据表前缀 `#@_` 和查询逻辑 !!!
$dsql = new DedeSql(false);
$dsql->SetQuery("SELECT arc.*,ch.maintypename FROM `#@__archives` arc LEFT JOIN `#@__arctype` ch ON arc.typeid=ch.id WHERE arc.id = '$aid'");
$dsql->Execute('get');
$arcRow = $dsql->GetArray('get');
$dsql->Close();
// 3. 构建新的URL路径
// !!! 这里是关键,请根据你的新URL规则来构建 !!!
// 假设新规则是 /article/年份/文章ID.html
$newYear = date('Y', strtotime($arcRow['pubdate']));
$newUrl = '/article/' . $newYear . '/' . $aid . '.html';
// 4. 执行301跳转
if (!empty($newUrl)) {
    // 获取完整的新URL
    $fullNewUrl = 'http://' . $_SERVER['HTTP_HOST'] . $newUrl;
    // 发送301头部
    if (headers_sent()) {
        // 如果头信息已发送,无法使用header函数,只能输出JavaScript跳转(对SEO不友好)
        echo "<script>window.location.href='$fullNewUrl';</script>";
    } else {
        // 发送标准的301重定向
        header("HTTP/1.1 301 Moved Permanently");
        header("Location: " . $fullUrl);
        exit();
    }
}
?>

PHP方案的缺点

  • 性能开销:每次访问旧文章,都需要额外查询数据库,增加服务器负担。
  • 执行时机:必须保证在任何内容输出之前执行,否则会出错。
  • 维护性:代码耦合在模板里,不够优雅。

第三步:验证301跳转是否生效

实施跳转后,必须进行验证,确保操作正确。

  1. 使用浏览器开发者工具

    • 在Chrome或Firefox中打开旧文章链接。
    • F12 打开开发者工具,切换到 "Network" (网络) 标签页。
    • 刷新页面,你应该能看到一个类型为 "301" 或 "302" 的请求,其 "Status" (状态) 栏会显示 "Moved Permanently"。
    • 查看 "Response Headers" (响应头),应该包含 Location: http://你的新URL
  2. 使用命令行工具(推荐)

    • 打开终端或命令提示符。
    • 使用 curl 命令(Linux/macOS自带,Windows需安装):
      curl -I http://www.yourdomain.com/a/旧文章路径.html
    • 你会收到类似下面的HTTP响应头,注意 LocationHTTP/1.1 301 Moved Permanently
      HTTP/1.1 301 Moved Permanently
      Server: nginx/1.18.0
      Date: Wed, 25 Oct 2025 10:00:00 GMT
      Content-Type: text/html
      Content-Length: 162
      Connection: keep-alive
      Location: http://www.yourdomain.com/article/新文章路径.html

      注意:-I 参数表示只获取响应头,不获取响应体,效率更高。

  3. 使用在线工具

总结与建议

方案 优点 缺点 推荐度
Nginx/Apache配置 性能最高、最稳定、最专业、对SEO最好 需要服务器管理权限 ★★★★★
PHP代码 无需服务器权限,实现灵活 性能差、有执行时机限制、代码耦合 ★☆☆☆☆
CMS插件 可视化操作,方便 可能存在兼容性问题,增加插件数量 ★★★☆☆

强烈建议:优先使用 服务器配置文件 的方法,这是解决此类问题的标准做法,效果最好,如果条件不允许,再考虑PHP方案,完成跳转后,记得将旧路径在百度站长平台和Google Search Console中提交“网站改版”工具,以加速搜索引擎的索引更新。

-- 展开阅读全文 --
头像
织梦随机调用orderby rand如何高效实现?
« 上一篇 2025-12-03
如何将织梦dede搜索改为url伪静态
下一篇 » 2025-12-03

相关文章

取消
微信二维码
支付宝二维码

目录[+]