- 服务器配置:让服务器能够将伪静态URL正确地重写为真实的动态文件。
- 织梦程序修改:修改织梦的搜索模板和核心文件,使其生成伪静态的链接,并处理伪静态URL的参数解析。
下面我将为你提供详细的步骤,以最常见的Nginx和Apache服务器为例。

第一步:服务器伪静态规则配置
你需要根据你的服务器类型,配置相应的伪静态规则。
Nginx 服务器
在你的Nginx网站配置文件中(通常在 /etc/nginx/sites-available/your_domain.conf 或 /usr/local/nginx/conf/vhost/your_domain.conf),在 server 块内添加以下规则:
# 将 /plus/search-关键词.html 的请求重写到 /plus/search.php
location ~* ^/plus/search-(.+)\.html$ {
# try_files 用来防止404,如果search.php不存在则返回404
try_files $uri /plus/search.php?$1;
}
# 如果你的搜索目录是 /search/,则使用如下规则
# location ~* ^/search/(.+)\.html$ {
# try_files $uri /plus/search.php?$1;
# }
配置说明:
^/plus/search-(.+)\.html$:这是一个正则表达式,匹配以/plus/search-开头,以.html结尾的URL。 会匹配 "关键词" 部分。try_files $uri /plus/search.php?$1;:这是核心指令。- 它首先尝试请求
$uri(即原始URL),如果文件不存在。 - 然后它会尝试请求
/plus/search.php?$1,这里的$1是一个反向引用,代表正则表达式中的第一个括号 的内容,也就是“关键词”,这样,/plus/search-DedeCMS.html就会被重写为/plus/search.php?keyword=DedeCMS。
- 它首先尝试请求
配置完成后,保存文件并重启Nginx服务:

sudo nginx -t sudo systemctl restart nginx
Apache 服务器
在你的Apache伪静态配置文件中,这通常是:
- 虚拟主机配置文件 (
/etc/apache2/sites-available/your_domain.conf) - 或者
.htaccess文件(确保该文件在您的网站根目录下,AllowOverride All已启用)
在 <VirtualHost> 标签内或 .htaccess 文件中添加以下规则:
# 启用重写引擎 RewriteEngine On # 如果你的搜索目录是 /plus/ # 将 /plus/search-关键词.html 重写到 /plus/search.php RewriteRule ^plus/search-(.*)\.html$ /plus/search.php?keyword=$1 [L,QSA] # 如果你的搜索目录是 /search/ # RewriteRule ^search/(.*)\.html$ /plus/search.php?keyword=$1 [L,QSA]
配置说明:
RewriteEngine On:开启URL重写功能。RewriteRule ^plus/search-(.*)\.html$ /plus/search.php?keyword=$1 [L,QSA]:这是核心规则。^plus/search-(.*)\.html$:匹配URL模式。/plus/search.php?keyword=$1:重写目标。$1是匹配到的“关键词”部分。[L]:Last Rule,表示如果此规则匹配,则停止后续的重写规则。[QSA]:Query String Append,表示将原始URL中的查询字符串追加到新的URL后面,对于搜索功能,通常不是必需的,但加上更安全。
配置完成后,保存文件并重启Apache服务:

sudo systemctl restart apache2
第二步:织梦程序修改
现在服务器已经可以“翻译”伪静态URL了,接下来要修改织梦,让它生成伪静态链接,并且能正确接收伪静态URL传递的参数。
修改搜索模板文件
织梦的搜索页面模板是 plus/search.htm,你需要修改这个文件中的表单提交地址。
打开 /plus/search.htm 文件,找到 <form> 标签,将 action 属性的值修改为你的伪静态目标。
修改前 (动态链接):
<form name="formsearch" action="/plus/search.php">
修改后 (伪静态链接):
<form name="formsearch" action="/plus/search-{dede:global name='keyword' function='RemoveXSS(@me)'/}.html">
或者,如果你使用的是 /search/ 目录:
<form name="formsearch" action="/search/{dede:global name='keyword' function='RemoveXSS(@me)'/}.html">
注意:
- 这里我们使用了织梦的标签
{dede:global name='keyword'...}来预填充关键词,但这只是为了在用户点击搜索前展示效果,实际的搜索提交是由JavaScript处理的。 - 更稳妥的方式是修改JavaScript提交逻辑,或者直接让
action指向一个固定的伪静态URL,然后在结果页再通过JS获取输入框的值并跳转,但上述方式在大多数情况下也够用。
修改搜索结果页的URL
当用户提交搜索后,织梦会跳转到结果页,这个结果页的URL也需要是伪静态的,这需要修改织梦的核心文件。
重要提示: 修改核心文件前,务必备份原文件!
打开文件:/include/arc.searchview.class.php
在这个文件中,找到 ParseTempletsFirst() 函数(通常在文件末尾附近),在里面找到生成搜索URL的代码段,类似这样的代码:
// 旧代码,大约在第700行左右,根据版本不同可能略有差异 $baseName = $GLOBALS['cfg_phpurl']."/search.php?keyword=".urlencode($this->keyword);
将其修改为:
// 新代码,生成伪静态URL $baseName = $GLOBALS['cfg_phpurl']."/search-".urlencode($this->keyword).".html";
或者,如果你使用 /search/ 目录:
// 新代码,生成伪静态URL $baseName = $GLOBALS['cfg_cmspath']."/search/".urlencode($this->keyword).".html";
代码解释:
- 我们将原来的
search.php?keyword=...替换为了search-关键词.html的形式。 urlencode()函数用于对中文等特殊字符进行编码,确保URL的合法性。
让织梦识别伪静态参数
这是最关键的一步,用户访问 plus/search-DedeCMS.html 时,服务器会把它交给 plus/search.php 处理,但 search.php 本身不认识这种URL格式,我们需要修改 search.php,让它能从URL路径中提取出“关键词”。
打开文件:/plus/search.php
找到处理 keyword 参数的代码段,通常在文件开头部分,类似这样:
// 旧代码
if(empty($keyword))
{
$keyword = '';
}
将其修改为以下代码:
// 新代码:优先从伪静态URL中获取关键词
if (empty($keyword)) {
// 检查是否是伪静态URL /plus/search-关键词.html
if (preg_match('~^/plus/search-(.+)\.html$~i', $_SERVER['REQUEST_URI'], $matches)) {
$keyword = $matches[1];
// 对URL解码,因为之前在arc.searchview.class.php中使用了urlencode
$keyword = rawurldecode($keyword);
} else {
$keyword = '';
}
}
代码解释:
- 我们首先检查
$keyword是否为空(默认情况下,如果是伪静态访问,它会是空的)。 - 然后使用
preg_match函数去匹配当前请求的$_SERVER['REQUEST_URI']。 - 如果匹配成功(即URL格式为
/plus/search-xxx.html),则将捕获到的“关键词”部分($matches[1])赋值给$keyword。 rawurldecode()用于将URL编码后的字符(如%E7%BB%84%E5%B9%BB)转换回原始中文字符(如“织梦”)。
总结与测试
完成以上所有步骤后,你的织梦搜索伪静态改造就基本完成了。
最终效果:
- 用户在搜索框输入“织梦CMS”并提交。
- 浏览器地址栏会变为
http://yourdomain.com/plus/search-织梦CMS.html。 - 服务器将此请求重写为
http://yourdomain.com/plus/search.php?keyword=织梦CMS。 search.php通过新的代码识别出keyword是“织梦CMS”。- 搜索结果页显示,并且分页链接、相关搜索等所有链接都将是伪静态格式。
测试方法:
- 清空浏览器缓存。
- 在前台搜索框输入关键词进行搜索,观察URL是否变成了伪静态格式。
- 检查搜索结果是否正常显示。
- 点击搜索结果的分页链接,检查是否正常工作。
- 检查服务器配置是否生效(可以通过访问一个不存在的伪静态URL,看是否返回404而不是500错误)。
如果遇到问题,请仔细检查每一步的配置,特别是文件路径和服务器规则是否与你的网站设置完全一致。
