伪静态的基本原理
我们要明白伪静态的原理:

- URL 重写:通过服务器配置(如 Apache 的
.htaccess或 Nginx 的rewrite规则),将一个看起来像静态文件的 URL(如/search/关键词.html)映射到服务器上一个实际的动态脚本(如/plus/search.php)。 - 参数传递:在这个过程中,URL 中的关键词等信息需要被正确地解析并传递给动态脚本。
/search/织梦cms.html需要让search.php知道搜索的关键词是“织梦cms”。
准备工作:开启 Rewrite 模块
在设置伪静态规则之前,必须确保你的 Web 服务器已经开启了 Rewrite 模块。
- Apache 服务器:
- 检查
httpd.conf文件中是否存在LoadModule rewrite_module modules/mod_rewrite.so并且没有被注释掉(去掉前面的 )。 - 确保你的网站虚拟主机配置中允许了
.htaccess文件覆盖 (AllowOverride All)。
- 检查
- Nginx 服务器:
- 确保编译 Nginx 时包含了
http_rewrite_module模块(通常默认包含)。 - 伪静态规则通常写在网站的配置文件(如
vhost/your_domain.conf)的server块内。
- 确保编译 Nginx 时包含了
方法一:使用 DedeCMS 内置的“仅动态”选项(推荐,最简单)
这是最安全、最简单的方法,DedeCMS 已经为我们做好了大部分工作。
步骤 1:修改搜索页模板
-
登录你的 DedeCMS 后台。
-
进入 【模板】 -> 【默认模板管理】。
(图片来源网络,侵删) -
找到并点击 【搜索页面模板】 (
search.htm) 进行编辑。 -
在模板中,找到搜索表单的
<form>标签,默认情况下,它的action属性可能是plus/search.php。 -
将
action属性修改为你的伪静态目标 URL。修改前:
(图片来源网络,侵删)<form name="formsearch" action="/plus/search.php">
修改后:
<form name="formsearch" action="/search">
或者更规范的写法(如果你的伪静态规则是
.html:<form name="formsearch" action="/search.html">
注意:这里我们只修改了
action的路径,<input name="q">(或keyword) 等输入框的name属性不需要改变,DedeCMS 的核心处理文件会自动识别。
步骤 2:设置后台参数
-
进入 DedeCMS 后台 【系统】 -> 【系统基本参数】 -> 【核心设置】。
-
找到 “搜索URL规则” 这一项。
-
将其修改为 “仅动态”。
为什么是“仅动态”? 这个选项的名称可能有点误导,选择它后,DedeCMS 不会为搜索结果页生成实际的静态 HTML 文件,而是保证所有搜索请求都由
search.php这个动态脚本处理,这对于伪静态来说是必须的,因为我们需要search.php来接收 URL 中的参数并生成页面,服务器上的 Rewrite 规则会把漂亮的 URL 请求转发给这个search.php。
步骤 3:添加服务器伪静态规则
这是最关键的一步,告诉服务器如何将漂亮的 URL 转发给 search.php。
对于 Apache 服务器:
在你的网站根目录下创建或修改 .htaccess 文件,并添加以下规则:
# 将 /search/关键词 或 /search/关键词.html 指向 search.php RewriteRule ^search/(.*)$ /plus/search.php?q=$1 [L] # 或者,如果你使用 /search.html?keyword=... 的形式 # RewriteRule ^search\.html$ /plus/search.php [L,QSA]
解释:
^search/(.*)$:匹配所有以search/开头,后面跟着任意字符()的 URL。/plus/search.php?q=$1:将匹配到的内容(即关键词)作为q参数传递给plus/search.php。[L]:Last Rule,表示匹配到这条规则后就不再继续匹配其他规则。[QSA]:Query String Append,表示保留原有的查询字符串(如&pagesize=10)。
对于 Nginx 服务器:
在你的 Nginx 网站配置文件(如 your_domain.conf)的 server 块内添加以下规则:
# 将 /search/关键词 或 /search/关键词.html 指向 search.php rewrite ^/search/(.*)$ /plus/search.php?q=$1 last; # 或者,如果你使用 /search.html?keyword=... 的形式 # rewrite ^/search\.html$ /plus/search.php last;
解释:
^/search/(.*)$:匹配所有以/search/开头的 URL。/plus/search.php?q=$1:将匹配到的内容作为q参数传递给plus/search.php。last:停止处理当前的rewrite规则,并搜索与修改后的 URI 匹配的 location。
方法二:使用现成的 DedeCMS 搜索伪静态插件
如果你觉得手动修改代码和规则比较麻烦,或者你的 DedeCMS 版本比较旧,可以使用插件。
- 搜索插件:在 DedeCMS 官方论坛、DedeQQ.com 或其他 DedeCMS 资源网站上搜索“搜索伪静态插件”。
- 安装插件:下载插件后,按照插件的说明文档进行安装,通常这些插件会自动帮你完成模板修改、参数设置和规则写入,非常方便。
- 优点:操作简单,一键完成,兼容性可能更好。
- 缺点:需要信任第三方插件的代码,可能存在安全风险。
常见问题与注意事项
-
404 Not Found 错误
- 原因:最常见的原因是服务器 Rewrite 模块未开启,或者伪静态规则写错了、放错了位置。
- 解决:仔细检查
.htaccess文件是否在网站根目录,Nginx 规则是否在正确的server块内,可以使用在线的 Rewrite 测试工具来验证你的规则。
-
搜索结果为空或参数未传递
- 原因:可能是
form的action路径不正确,或者input的name属性被修改了导致 DedeCMS 无法识别参数。 - 解决:确保
action指向你伪静态的路径(如/search),并且输入框的name仍然是q或keyword。
- 原因:可能是
-
分页链接失效
- 原因:搜索结果页的分页链接通常是动态的,如果服务器没有对分页的 URL 做重写,就会导致 404。
- 解决:你需要检查分页的生成代码,并确保你的 Rewrite 规则能够覆盖分页 URL,如果分页 URL 是
/plus/search.php?q=关键词&PageNo=2,你的规则需要能处理这种情况。[QSA]标志(Apache)或last标志(Nginx)可以解决这个问题。
-
URL 格式
/search/关键词.html(推荐):看起来最像静态页面。/search/关键词/:也很常见。/search.html?keyword=关键词:这是伪静态中的一种,但 URL 中仍然有 ,不够“伪”。- 选择一种你喜欢的格式,并确保 Rewrite 规则和模板
action路径与之对应。
| 步骤 | 操作 | 关键点 |
|---|---|---|
| 后台设置 | 【系统基本参数】->【核心设置】->【搜索URL规则】设置为 “仅动态” | 保证请求由 search.php 处理 |
| 修改模板 | 编辑 search.htm,修改表单 action 为 /search 或 /search/关键词.html |
让前端请求指向伪静态路径 |
| 配置服务器 | 在 .htaccess (Apache) 或 Nginx 配置中添加 Rewrite 规则 |
核心步骤,实现 URL 重写 |
| 测试 | 清除浏览器缓存,访问伪静态 URL,检查结果和分页是否正常 | 验证每一步是否成功 |
对于大多数用户来说,方法一 是最值得推荐的,它既安全又能让你完全理解其工作原理,如果在操作中遇到问题,可以仔细检查以上提到的每个细节。
