织梦搜索结果页伪静态如何实现?

99ANYc3cd6
预计阅读时长 18 分钟
位置: 首页 织梦建站 正文

织梦默认的搜索URL格式是动态的, /plus/search.php?keyword=关键词&searchtype=title

织梦搜索结果页伪静态
(图片来源网络,侵删)

伪静态可以将这个URL美化成更简洁、更利于SEO的格式, /plus/search/关键词-title.html 或者 /plus/search/关键词.html

下面我将提供两种最主流、最有效的方法,并附上详细的步骤和注意事项。


修改内核文件(最稳定、最推荐)

这种方法直接修改织梦的核心文件,实现原理是:当访问伪静态URL时,通过一个自定义的规则将请求重定向到真正的动态搜索脚本 search.php,并将URL中的参数传递过去。

优点:

  • 稳定可靠:不依赖服务器重写规则,即使服务器配置有问题也能工作。
  • 兼容性好:不受服务器环境(Apache/Nginx)影响。
  • 官方推荐:这是织梦官方社区和资深开发者最推崇的方式。

缺点:

  • 需要修改核心文件,升级织梦时需要重新修改。

详细步骤:

第1步:创建自定义处理脚本 search.php

  1. 打开你的织梦安装目录,找到 plus 文件夹。
  2. plus 文件夹中,创建一个新的PHP文件,命名为 search.php
  3. 将以下代码完整复制到这个新创建的 search.php 文件中,并保存。
<?php
/**
 * DedeCMS 搜索结果页伪静态处理
 * 将类似 /plus/search/关键词-title.html 的请求重定向到 /plus/search.php
 */
// 引入织梦核心文件
require_once(dirname(__FILE__)."/../include/common.inc.php");
// 获取当前请求的URI
$uri = $_SERVER['REQUEST_URI'];
// 定义伪静态URL的正则表达式模式
// 匹配 /plus/search/关键词.html 或 /plus/search/关键词-title.html 等格式
// '([^/\.]+)' 用于匹配关键词,可以包含中文、字母、数字等
$pattern = '/^\/plus\/search\/([^/\.]+)\.html/i';
// 检查当前URI是否符合伪静态规则
if (preg_match($pattern, $uri, $matches)) {
    // $matches[1] 中存储的就是关键词
    $keyword = $matches[1];
    // 解码URL编码的关键词(如果关键词被URL编码了)
    $keyword = urldecode($keyword);
    // 构建织梦默认的动态搜索URL
    $dynamic_url = "/plus/search.php?keyword=" . urlencode($keyword);
    // 使用301重定向到动态URL
    // 301重定向对SEO最友好,告诉搜索引擎页面已永久移动
    Header("HTTP/1.1 301 Moved Permanently");
    Header("Location: " . $dynamic_url);
    // 结束脚本执行
    exit();
}
// 如果URI不符合伪静态规则,则可能是直接访问了 /plus/search.php
// 这种情况下,我们不做任何处理,让系统按默认逻辑执行
// 但为了防止直接访问这个文件出错,我们引入一下原search.php
// 注意:如果直接访问 /plus/search.php,这个文件不会被调用,所以这里可以省略。
// 如果用户访问了 /plus/search/search.php 这种错误路径,我们可以引导一下。
if (basename($_SERVER['PHP_SELF']) == 'search.php') {
    // 可以在这里添加一些提示或直接跳转到首页
    // header("Location: /");
    // exit;
}
?>

代码解释:

织梦搜索结果页伪静态
(图片来源网络,侵删)
  • 这段脚本的核心是使用正则表达式 preg_match 来判断当前访问的URL是否符合我们设定的伪静态格式。
  • 如果符合,它会提取出“关键词”,然后构建一个标准的织梦动态搜索URL,并通过 301 重定向跳转过去。
  • 301 重定向非常重要,它能将搜索页面的权重正确传递给动态页面,避免SEO损失。

第2步:修改原搜索页模板文件

为了让页面上的“搜索”按钮和表单生成的链接也是伪静态的,我们需要修改搜索模板。

  1. 登录织梦后台 -> 模板 -> 默认模板管理
  2. 找到并打开搜索页模板文件,通常是 plus/search.htm
  3. 在模板中找到搜索表单的 <form> 标签,将其 action 属性修改为伪静态的URL格式。

修改前:

<form action="/plus/search.php" name="formsearch">

修改后:

<form action="/plus/search/{dede:global name='keyword' function='RemoveXSS(@me)'/}.html" name="formsearch">
  • 这里我们使用了织梦的标签 {dede:global name='keyword'} 来获取用户输入的关键词,并直接嵌入到 action 的URL中。
  • function='RemoveXSS(@me)' 是一个安全过滤函数,防止XSS攻击,强烈建议加上。

第3步:更新首页或列表页的搜索链接

为了让网站内其他地方的搜索链接也变成伪静态,你需要更新它们。

织梦搜索结果页伪静态
(图片来源网络,侵删)
  • 首页搜索框:和第2步一样,修改首页模板 index.htm 中的搜索表单 action 属性。
  • 列表页/内容页搜索:如果你在列表页或内容页添加了搜索功能,同样需要修改对应模板文件中的 action 属性。

第4步:生成和更新

  1. 在织梦后台,进入“生成” -> “更新HTML”。
  2. 建议执行一次“更新主页”,以确保首页的搜索链接已经更新。
  3. 如果你之前有生成过搜索页面,可以进入“更新文档” -> “搜索页更新”,生成一下搜索页的静态缓存(虽然现在主要是动态的,但这一步可以清理旧缓存)。

使用服务器伪静态规则(Nginx/Apache)

这种方法不修改织梦内核,而是通过服务器的重写模块(如Apache的.htaccess或Nginx的rewrite规则)来实现URL重写。

优点:

  • 不修改核心文件:织梦升级时无需重新修改。
  • 性能略高:服务器层面的重写通常比PHP脚本执行更快。

缺点:

  • 依赖服务器环境:必须在支持URL重写的服务器上配置。
  • 配置可能冲突:如果网站已有其他伪静态规则,可能会产生冲突。

详细步骤:

Nginx 服务器配置

  1. 登录你的服务器,找到网站配置文件,通常位于 /usr/local/nginx/conf/vhost/你的域名.conf
  2. server { ... } 块内,找到 location 配置,如果没有就添加一个。
  3. location / { ... } 块内部,添加以下 rewrite 规则。
# 在 location / { ... } 内部添加
rewrite "^/plus/search/([^/\.]+)\.html$" /plus/search.php?keyword=$1 last;

配置解释:

  • rewrite:Nginx的重写指令。
  • "^/plus/search/([^/\.]+)\.html$":匹配的URL正则表达式。
  • /plus/search.php?keyword=$1:重写后的目标URL,$1 是正则表达式中的第一个捕获组(即关键词)。
  • last:表示在本条 rewrite 规则完成后,停止处理其他 rewrite 规则,并搜索匹配的 location
  1. 保存配置文件后,重新加载Nginx配置使生效:
    nginx -s reload

Apache 服务器配置

  1. 确保你的Apache服务器开启了 mod_rewrite 模块(通常虚拟主机都已开启)。
  2. 在织梦网站的根目录下,找到 .htaccess 文件,如果不存在,请创建一个。
  3. .htaccess 文件中,添加以下 RewriteRule 规则。
# 在 RewriteEngine On 后面添加
RewriteEngine On
# 将搜索伪静态URL重写到动态脚本
RewriteRule ^plus/search/([^/\.]+)\.html$ /plus/search.php?keyword=$1 [L,QSA]

配置解释:

  • RewriteEngine On:开启重写引擎。
  • RewriteRule:重写规则。
  • ^plus/search/([^/\.]+)\.html$:匹配的URL正则表达式。
  • /plus/search.php?keyword=$1:重写后的目标URL。
  • [L]:Last规则,表示如果此规则匹配,则停止后续处理。
  • [QSA]:Query String Append,表示将原始URL中的查询字符串追加到新的URL后面,虽然我们的规则里没有,但加上更稳妥。
  1. 保存 .htaccess 文件即可,Apache会自动读取。

总结与建议

特性 方法一 (修改内核) 方法二 (服务器规则)
稳定性 极高,不依赖环境 依赖服务器配置,可能冲突
升级维护 升级需重新修改 无需修改,一劳永逸
SEO效果 完美,通过301重定向 完美,URL直接被服务器解析
操作难度 需要上传文件、修改模板 需要服务器权限,修改配置文件
推荐人群 所有用户,尤其是新手和追求稳定性的用户 有服务器管理经验的用户,或不希望修改核心文件的用户

我的最终建议是:

对于绝大多数用户,强烈推荐使用【方法一:修改内核文件】,它最稳定,不受服务器环境限制,并且能确保SEO权重通过301重定向正确传递,虽然升级时需要重复操作,但相比于可能出现的各种服务器配置问题,这点付出是完全值得的。

如果你对自己的服务器配置非常熟悉,并且希望织梦升级时能省心,那么可以选择【方法二:服务器伪静态规则】。

-- 展开阅读全文 --
头像
dede标签循环如何正确使用与嵌套?
« 上一篇 今天
dede手机端如何实时预览?
下一篇 » 今天

相关文章

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

目录[+]