准备工作:开启伪静态功能
在配置服务器规则之前,请务必先在织梦DedeCMS后台开启伪静态功能。

(图片来源网络,侵删)
- 登录您的织梦DedeCMS后台。
- 进入 “系统” -> “系统基本参数”。
- 在左侧菜单选择 “核心设置”。
- 找到 “是否使用伪静态” 选项,将其设置为 “是”。
- 点击 “确定” 保存设置。
针对不同服务器的伪静态规则
Apache 服务器 (.htaccess)
这是最常见的虚拟主机环境,织梦默认的安装包中就包含了一个 htaccess.txt 文件,您只需要将其重命名为 .htaccess 并上传到网站根目录即可。
操作步骤:
- 在您的网站根目录下,找到
htaccess.txt文件。 - 将其重命名为
.htaccess。 - 确保
.htaccess文件中包含以下规则(如果您的规则不完整或丢失,可以用下面的内容覆盖):
# 织梦DedeCMS 5.7 伪静态规则 (Apache)
# 如果目录存在文件,直接访问文件
RewriteCond %{REQUEST_FILENAME} !-f
# 如果目录存在目录,直接访问目录
RewriteCond %{REQUEST_FILENAME} !-d
# 如果文件或目录不存在,则进行伪静态重写
RewriteRule ^(.*)$ /index\.php [L]
# 针对栏目、文章、列表等具体规则(如果上面的通用规则不生效,可以尝试下面的详细规则)
# RewriteRule ^index\.html$ /index.php [L]
# RewriteRule ^list-([0-9]+)\.html$ /plus/list.php?tid=$1 [L]
# RewriteRule ^list-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /plus/list.php?tid=$1&totalresult=$2&PageNo=$3 [L]
# RewriteRule ^view-([0-9]+)-([0-9]+)\.html$ /plus/view.php?arcID=$1&pageno=$2 [L]
# RewriteRule ^category/([a-zA-Z0-9_-]+)/?$ /plus/list.php?tid=$1 [L]
# RewriteRule ^archives/([a-zA-Z0-9_-]+)/([0-9]+)/?$ /plus/view.php?arcID=$2 [L]
# RewriteRule ^archives/([a-zA-Z0-9_-]+)/?$ /plus/list.php?tid=$1 [L]
# RewriteRule ^tags/([a-zA-Z0-9_-]+)/?$ /tags.php?/$1/ [L]
# RewriteRule ^tags/([a-zA-Z0-9_-]+)/([0-9]+)/?$ /tags.php?/$1/$2/ [L]
# RewriteRule ^tag/([a-zA-Z0-9_-]+)/?$ /tags.php?/$1/ [L]
# RewriteRule ^tag/([a-zA-Z0-9_-]+)/([0-9]+)/?$ /tags.php?/$1/$2/ [L]
说明:
- 上面第一段规则是一个通用的规则,适用于大多数情况,它会将所有不存在的请求都指向
index.php。 - 第二段是更详细的规则,分别对应栏目列表、文章内容页、标签页等,如果通用规则导致某些页面404,可以尝试使用详细规则。
- 重要提示:部分主机商可能不允许在
.htaccess中使用RewriteEngine On,但通常包含在htaccess.txt中,如果您的规则不生效,请检查文件开头是否有RewriteEngine On这一行,如果没有,请手动添加。
Nginx 服务器
Nginx的规则需要配置在服务器的配置文件中,通常是 nginx.conf 或您对应站点的配置文件(如 yourdomain.com.conf)。

(图片来源网络,侵删)
操作步骤:
- 登录您的服务器,找到Nginx的配置文件。
- 在您网站的
server配置块中,添加如下rewrite规则。 - 修改后,需要 重启Nginx服务 使配置生效。
Nginx 配置规则:
# 织梦DedeCMS 5.7 伪静态规则 (Nginx)
# 将此段代码放入 server { ... } 块内
location / {
# 如果请求的文件或目录不存在,则进行重写
if (!-e $request_filename) {
rewrite "^/index\.html$" /index.php last;
rewrite "^/list-([0-9]+)\.html$" /plus/list.php?tid=$1 last;
rewrite "^/list-([0-9]+)-([0-9]+)-([0-9]+)\.html$" /plus/list.php?tid=$1&totalresult=$2&PageNo=$3 last;
rewrite "^/view-([0-9]+)-([0-9]+)\.html$" /plus/view.php?arcID=$1&pageno=$2 last;
# 更多规则...
rewrite "^/category/([a-zA-Z0-9_-]+)/?$ /plus/list.php?tid=$1 last;
rewrite "^/archives/([a-zA-Z0-9_-]+)/([0-9]+)/?$ /plus/view.php?arcID=$2 last;
rewrite "^/archives/([a-zA-Z0-9_-]+)/?$ /plus/list.php?tid=$1 last;
rewrite "^/tags/([a-zA-Z0-9_-]+)/?$ /tags.php?/$1/ last;
rewrite "^/tags/([a-zA-Z0-9_-]+)/([0-9]+)/?$ /tags.php?/$1/$2/ last;
# 通用规则,放在最后,作为兜底
rewrite "^(.*)$" /index.php last;
}
}
说明:
- Nginx的规则通常需要更精确地匹配,避免错误重写。
last标志表示在本 location 中完成重写,并重新开始新一轮的 location 匹配。break标志表示在本 location 中完成重写,不再进行后续的匹配。- 对于通用规则,使用
rewrite "^(.*)$" /index.php last;可以处理大部分情况。
IIS 服务器 (web.config)
IIS 7.0 及更高版本使用 web.config 文件,您需要在网站根目录创建或修改这个文件。
操作步骤:
- 在网站根目录下创建一个名为
web.config的文件。 - 复制到该文件中。
- 保存文件,IIS会自动读取和应用这些规则。
web.config 配置规则:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<!-- 通用规则 -->
<rule name="DedeCMS Rewrite" stopProcessing="true">
<match url="^(.*)$" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Rewrite" url="index.php/{R:1}" appendQueryString="true" />
</rule>
<!-- 详细规则 (如果通用规则不生效,可以尝试启用这些) -->
<!--
<rule name="DedeCMS List" stopProcessing="true">
<match url="^list-([0-9]+)\.html$" />
<action type="Rewrite" url="plus/list.php?tid={R:1}" />
</rule>
<rule name="DedeCMS View" stopProcessing="true">
<match url="^view-([0-9]+)-([0-9]+)\.html$" />
<action type="Rewrite" url="plus/view.php?arcID={R:1}&pageno={R:2}" />
</rule>
-->
</rules>
</rewrite>
</system.webServer>
</configuration>
说明:
stopProcessing="true"表示匹配到此规则后,就停止处理后续规则。negate="true"表示对条件取反。appendQueryString="true"表示保留原始URL中的查询字符串。- IIS的伪静态有时需要安装 URL Rewrite 模块,如果您的服务器上没有此模块,请先安装。
常见问题与解决方法
-
配置后网站首页可以打开,但栏目页、文章页等打开是404错误。
- 原因:服务器规则未生效或规则不正确。
- 解决:
- 检查规则:确认您使用的规则与您的服务器环境(Apache/Nginx/IIS)完全匹配。
- 检查文件名:Apache 确保文件是
.htaccess而不是htaccess.txt,Nginx 确保规则在正确的server块中。 - 检查权限:确保
.htaccess(Apache) 或web.config(IIS) 文件在网站根目录,并且有读取权限。 - 重启服务:Nginx 和 IIS 修改配置后必须重启服务才能生效,Apache 有时也需要重启或刷新配置。
-
后台的“生成HTML”功能中的“选择目录默认页HTML”选项变成了灰色,无法勾选。
- 原因:这是织梦DedeCMS的一个特性,当您开启伪静态后,首页本身就是由
index.php动态生成的,所以不再需要生成一个静态的index.html文件。 - 解决:这是正常现象,无需处理,您的首页会通过伪静态规则正常访问。
- 原因:这是织梦DedeCMS的一个特性,当您开启伪静态后,首页本身就是由
-
规则生效后,网站地图无法生成或访问。
- 原因:网站的地图(如
sitemap.xml)是真实存在的文件,伪静态规则可能会错误地将其重定向到index.php。 - 解决:需要在伪静态规则中加入排除项,在 Apache 的
.htaccess文件开头添加:RewriteCond %{REQUEST_URI} !^/sitemap\.xml [NC] RewriteCond %{REQUEST_URI} !^/sitemap\.html [NC]然后再跟原来的
RewriteRule,Nginx 和 IIS 也需要做类似的排除处理。
- 原因:网站的地图(如
| 服务器环境 | 配置文件 | 核心操作 |
|---|---|---|
| Apache | .htaccess |
将 htaccess.txt 重命名为 .htaccess 并上传到根目录。 |
| Nginx | nginx.conf (站点配置文件) |
在 server 块中添加 rewrite 规则,并重启Nginx。 |
| IIS | web.config |
在网站根目录创建或修改 web.config 文件。 |
请根据您的实际服务器环境选择对应的规则进行配置,如果遇到问题,请仔细检查每一步的细节,特别是文件名、路径和服务器重启操作。
