如何将织梦dede搜索改为url伪静态

99ANYc3cd6
预计阅读时长 18 分钟
位置: 首页 DEDE建站 正文
  1. 服务器配置:让服务器能够将伪静态URL正确地重写为真实的动态文件。
  2. 织梦程序修改:修改织梦的搜索模板和核心文件,使其生成伪静态的链接,并处理伪静态URL的参数解析。

下面我将为你提供详细的步骤,以最常见的Nginx和Apache服务器为例。

如何将织梦dede搜索改为url伪静态
(图片来源网络,侵删)

第一步:服务器伪静态规则配置

你需要根据你的服务器类型,配置相应的伪静态规则。

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服务:

如何将织梦dede搜索改为url伪静态
(图片来源网络,侵删)
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服务:

如何将织梦dede搜索改为url伪静态
(图片来源网络,侵删)
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)转换回原始中文字符(如“织梦”)。

总结与测试

完成以上所有步骤后,你的织梦搜索伪静态改造就基本完成了。

最终效果:

  1. 用户在搜索框输入“织梦CMS”并提交。
  2. 浏览器地址栏会变为 http://yourdomain.com/plus/search-织梦CMS.html
  3. 服务器将此请求重写为 http://yourdomain.com/plus/search.php?keyword=织梦CMS
  4. search.php 通过新的代码识别出 keyword 是“织梦CMS”。
  5. 搜索结果页显示,并且分页链接、相关搜索等所有链接都将是伪静态格式。

测试方法:

  1. 清空浏览器缓存。
  2. 在前台搜索框输入关键词进行搜索,观察URL是否变成了伪静态格式。
  3. 检查搜索结果是否正常显示。
  4. 点击搜索结果的分页链接,检查是否正常工作。
  5. 检查服务器配置是否生效(可以通过访问一个不存在的伪静态URL,看是否返回404而不是500错误)。

如果遇到问题,请仔细检查每一步的配置,特别是文件路径和服务器规则是否与你的网站设置完全一致。

-- 展开阅读全文 --
头像
dede文章路径变了,301跳转怎么做?
« 上一篇 12-03
moduleurllist.txt是什么?
下一篇 » 12-03

相关文章

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

目录[+]