织梦搜索伪静态,URL如何改?

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

核心思路

织梦的默认搜索URL是动态的,/search.php?keyword=关键词&channeltype=1。 我们的目标是将其修改为更静态的形式,/search/关键词-channeltype-1.html

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

这个过程分为两步:

  1. 修改模板文件:让织梦在生成搜索链接时,使用我们自定义的静态URL格式。
  2. 配置服务器伪静态规则:当用户访问我们生成的静态URL时,服务器能将其“翻译”回织梦能识别的动态URL,并正确执行搜索。

第一步:修改织梦模板文件

这是最关键的一步,目的是改变搜索链接的生成方式。

修改搜索表单页面 (通常是 search.htm)

这个文件位于你的织梦模板目录下,路径类似 /templets/default/search.htm

你需要找到搜索表单的 <form> 标签,将其 action 属性从默认的动态URL改为新的伪静态URL。

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

原始代码 (大约在第16行左右):

<form name="formsearch" action="{dede:global.cfg_cmspath/}/search.php" >

修改后的代码:

<form name="formsearch" action="{dede:global.cfg_cmspath/}/search" >  <!-- 注意这里去掉了 .php -->

这样,当用户在搜索框中输入关键词并点击搜索时,表单会提交到 /search 这个地址。

修改搜索结果页模板 (通常是 search_result.htm)

这个文件同样位于模板目录下,我们需要修改分页导航的链接,使其也符合新的伪静态格式。

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

织梦的分页标签是 {dede:pagelist listitem="pre,next,end,option" listsize="5" /},这个标签本身不支持直接修改URL格式,我们需要通过修改织梦的核心文件来实现,但更简单的方法是直接在模板里用自定义的循环来生成。

原始分页代码:

{dede:pagelist listitem="pre,next,end,option" listsize="5" /}

替换为自定义分页代码 (更灵活可控):search_result.htm 中找到分页部分,用以下代码替换,这段代码会遍历分页数据,并按照我们想要的格式生成链接。

<!-- 分页开始 -->
<div class="page">
    {dede:pagelist listitem="pre,next,end,option" listsize="5" runphp='yes'}
        $attr = array();
        preg_match('/listitem="(.+?)"/', $this->ctag, $matches);
        $listitems = explode(',', $matches[1]);
        $revalue = '';
        foreach ($listitems as $li) {
            $li = trim($li);
            if ($li == 'pre') {
                $prepage = str_replace('.php', '', $this->GetPrePage());
                $revalue .= "<a href='".$prepage."'>上一页</a> ";
            } else if ($li == 'next') {
                $nextpage = str_replace('.php', '', $this->GetNextPage());
                $revalue .= "<a href='".$nextpage."'>下一页</a> ";
            } else if ($li == 'end') {
                $endpage = str_replace('.php', '', $this->GetEndPage());
                $revalue .= "<a href='".$endpage."'>末页</a> ";
            } else if ($li == 'option') {
                $rule = '/search-{page}.html'; // 定义伪静态规则
                $revalue .= "<select name='gotopage' onchange='location.href=this.options[this.selectedIndex].value;'>";
                for($i=1;$i<=$this->TotalResult; $i++) {
                    $page = $i;
                    $url = str_replace('{page}', $page, $rule);
                    if($this->NowPage == $page) {
                        $revalue .= "<option value='".$url."' selected>".$page."</option>";
                    } else {
                        $revalue .= "<option value='".$url."'>".$page."</option>";
                    }
                }
                $revalue .= "</select>";
            }
        }
        echo $revalue;
    {/dede:pagelist}
</div>
<!-- 分页结束 -->

代码解释:

  • runphp='yes':允许在标签内执行PHP代码。
  • $rule = '/search-{page}.html';:这里定义了分页页面的伪静态规则,你可以根据需要修改,/search/关键词-{page}.html
  • str_replace('.php', '', $this->GetPrePage()):这是核心,它获取原始的分页URL(如 /search.php?keyword=xxx&pageno=2),然后去掉 .php 部分,得到 /search?keyword=xxx&pageno=2,服务器规则会处理这个URL。

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

现在我们已经让织梦生成了类似 /search/关键词-channeltype-1.html 的链接,但服务器还不认识它,我们需要告诉服务器如何处理这种请求。

重要提示:在修改服务器配置前,请务必备份你的配置文件!

Apache 服务器

织梦官方已经为我们准备好了Apache的伪静态规则文件,名为 httpd.ini.txt

  • 操作步骤

    1. 通过FTP或文件管理器,进入你的网站根目录。
    2. 找到 httpd.ini.txt 文件。
    3. 将其重命名为 httpd.ini
    4. 将这个 httpd.ini 文件上传到你的网站根目录

    httpd.ini 文件内容通常包含以下规则(这是织梦5.7及以后版本的通用规则):

    [ISAPI_Rewrite]
    # 3600 = 1 hour
    CacheClockRate 3600
    RepeatLimit 32
    # 独立主机用户可修改 RewriteBase 为 /你的网站目录/
    # 虚拟主机用户请使用 RewriteBase /
    RewriteBase /
    RewriteRule ^search$ /search\.php [NC,L]
    RewriteRule ^search/(.*)$ /search\.php\?$1 [NC,L]
    RewriteRule ^search/list-(.+?)-(.+?).html$ /search\.php?keyword=$1&channeltype=$2 [NC,L]
    RewriteRule ^search/list-(.+?)-(.+?)-(.+?).html$ /search\.php?keyword=$1&channeltype=$2&pagesize=$3 [NC,L]
    • RewriteRule ^search$ /search\.php [NC,L]:将 /search 重写为 /search.php
    • RewriteRule ^search/(.*)$ /search\.php\?$1 [NC,L]:将 /search/任意参数 重写为 /search.php?任意参数,这是最通用的一条规则。
    • 后面几条是针对更复杂URL格式的规则,如果上面的通用规则能解决问题,这几条可以保留也可以注释掉。

Nginx 服务器

对于Nginx,你需要修改网站配置文件(通常在 /etc/nginx/sites-available/ 目录下,或者宝塔面板里的“网站设置”->“伪静态”)。

将以下规则添加到你的Nginx server 配置块中:

# 将 /search 重写为 /search.php
rewrite "^/search$" /search.php last;
# 将 /search/任意参数 重写为 /search.php?任意参数
rewrite "^/search/(.*)$" /search.php?$1 last;
# 可选:针对特定格式的URL
rewrite "^/search/list-(.+?)-(.+?).html$" /search.php?keyword=$1&channeltype=$2 last;
rewrite "^/search/list-(.+?)-(.+?)-(.+?).html$" /search.php?keyword=$1&channeltype=$2&pagesize=$3 last;

宝塔面板用户操作

  1. 进入“网站”列表,点击你的站点。
  2. 点击“设置” -> “伪静态”。
  3. 将上面的Nginx规则粘贴进去,然后点击“保存”。

IIS 服务器

IIS需要使用 web.config 文件。

  1. 在网站根目录创建一个 web.config 文件。
  2. 粘贴进去:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="DedeSearch Rewrite" stopProcessing="true">
                    <match url="^search$" />
                    <action type="Rewrite" url="search.php" />
                </rule>
                <rule name="DedeSearch Rewrite with Params" stopProcessing="true">
                    <match url="^search/(.*)$" />
                    <action type="Rewrite" url="search.php?{R:1}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

第三步:清除缓存并测试

完成以上所有步骤后,你需要:

  1. 清除织梦缓存

    • 登录织梦后台。
    • 进入“系统” -> “清除缓存” -> “一键更新所有缓存”。
    • 或者直接删除 /data 目录下的 cache 文件夹里的内容。
  2. 测试

    • 前台访问你的搜索页面 (/search)。
    • 输入一个关键词进行搜索,检查URL是否变成了你想要的伪静态格式(如 /search/关键词.html)。
    • 检查搜索结果是否正确显示。
    • 点击分页链接,检查分页URL是否也正确,并且能正常跳转。

常见问题与注意事项

  • 404错误:如果访问伪静态URL后出现404错误,几乎可以肯定是服务器伪静态规则没有生效,请检查规则文件是否上传到了正确位置(网站根目录),文件名是否正确,并确保服务器模块(如Apache的 mod_rewrite)已启用。
  • 搜索结果为空:如果URL格式对了,但搜索结果不正确或为空,通常是第一步的模板修改有误,或者分页代码中的规则与服务器规则不匹配,请仔细核对代码。
  • 特殊字符:如果搜索关键词包含空格或特殊符号,URL可能会变得很长或混乱,可以考虑在生成URL时对关键词进行 urlencode 处理,但这会增加复杂性,对于大多数情况,当前方案已经足够。
  • 不同织梦版本:虽然本教程适用于大多数DedeCMS 5.x版本,但极少数旧版本可能存在细微差异,如果遇到问题,可以查阅对应版本的官方文档或社区。

通过以上步骤,你就可以成功地将织梦DedeCMS的搜索功能改为URL伪静态,让你的网站在搜索引擎眼中更加“漂亮”了。

-- 展开阅读全文 --
头像
威海SEO织梦dedecms模板第五期有何新突破?
« 上一篇 12-01
织梦仿站实战教程,如何快速搭建如织梦吧?
下一篇 » 12-01

相关文章

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

目录[+]