织梦默认的搜索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
- 打开你的织梦安装目录,找到
plus文件夹。 - 在
plus文件夹中,创建一个新的PHP文件,命名为search.php。 - 将以下代码完整复制到这个新创建的
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步:修改原搜索页模板文件
为了让页面上的“搜索”按钮和表单生成的链接也是伪静态的,我们需要修改搜索模板。
- 登录织梦后台 -> 模板 -> 默认模板管理。
- 找到并打开搜索页模板文件,通常是
plus/search.htm。 - 在模板中找到搜索表单的
<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步:生成和更新
- 在织梦后台,进入“生成” -> “更新HTML”。
- 建议执行一次“更新主页”,以确保首页的搜索链接已经更新。
- 如果你之前有生成过搜索页面,可以进入“更新文档” -> “搜索页更新”,生成一下搜索页的静态缓存(虽然现在主要是动态的,但这一步可以清理旧缓存)。
使用服务器伪静态规则(Nginx/Apache)
这种方法不修改织梦内核,而是通过服务器的重写模块(如Apache的.htaccess或Nginx的rewrite规则)来实现URL重写。
优点:
- 不修改核心文件:织梦升级时无需重新修改。
- 性能略高:服务器层面的重写通常比PHP脚本执行更快。
缺点:
- 依赖服务器环境:必须在支持URL重写的服务器上配置。
- 配置可能冲突:如果网站已有其他伪静态规则,可能会产生冲突。
详细步骤:
Nginx 服务器配置
- 登录你的服务器,找到网站配置文件,通常位于
/usr/local/nginx/conf/vhost/你的域名.conf。 - 在
server { ... }块内,找到location配置,如果没有就添加一个。 - 在
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。
- 保存配置文件后,重新加载Nginx配置使生效:
nginx -s reload
Apache 服务器配置
- 确保你的Apache服务器开启了
mod_rewrite模块(通常虚拟主机都已开启)。 - 在织梦网站的根目录下,找到
.htaccess文件,如果不存在,请创建一个。 - 在
.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后面,虽然我们的规则里没有,但加上更稳妥。
- 保存
.htaccess文件即可,Apache会自动读取。
总结与建议
| 特性 | 方法一 (修改内核) | 方法二 (服务器规则) |
|---|---|---|
| 稳定性 | 极高,不依赖环境 | 依赖服务器配置,可能冲突 |
| 升级维护 | 升级需重新修改 | 无需修改,一劳永逸 |
| SEO效果 | 完美,通过301重定向 | 完美,URL直接被服务器解析 |
| 操作难度 | 需要上传文件、修改模板 | 需要服务器权限,修改配置文件 |
| 推荐人群 | 所有用户,尤其是新手和追求稳定性的用户 | 有服务器管理经验的用户,或不希望修改核心文件的用户 |
我的最终建议是:
对于绝大多数用户,强烈推荐使用【方法一:修改内核文件】,它最稳定,不受服务器环境限制,并且能确保SEO权重通过301重定向正确传递,虽然升级时需要重复操作,但相比于可能出现的各种服务器配置问题,这点付出是完全值得的。
如果你对自己的服务器配置非常熟悉,并且希望织梦升级时能省心,那么可以选择【方法二:服务器伪静态规则】。
