DedeCMS伪静态设置需完成后台与服务器两步配置,先在系统参数中开启伪静态功能,再通过Apache的.htaccess或Nginx的配置文件编写重写规则,确保URL由动态转为静态形式,同时注意RewriteBase路径、服务器模块启用、规则兼容性及缓存清理,避免404或冲突问题。

DedeCMS的伪静态设置,简单来说,就是让你的网站URL看起来更“干净”、更友好,从原本带着问号和各种参数的动态链接(比如
view.php?aid=123)变成像静态文件一样的路径(比如
view-123-1.html)。这背后涉及两块核心操作:首先是DedeCMS后台自身的配置,告诉系统“我要用伪静态了”;其次是服务器端的配置,通常是通过Apache的
.htaccess文件或者Nginx的
nginx.conf文件,来告诉服务器“当用户访问这个伪静态地址时,其实是请求了那个动态地址”。理解这两点,设置起来就没那么玄乎了。
解决方案
要让DedeCMS跑起来伪静态,我们需要分两步走,一步在CMS内部,一步在服务器外部。这就像给网站穿件新衣服,得先选好款式,再找裁缝量身定做。
DedeCMS后台设置 进入你的DedeCMS后台,找到“系统”菜单下的“系统基本参数”。在左侧导航栏里,点击“核心设置”。这里你会看到一个选项,通常是“是否使用伪静态”。你需要把它从“否”改为“是”。 接着,很多DedeCMS版本可能还需要在“生成”菜单里,选择“更新主页HTML”或者“一键更新网站”,确保系统能识别到这个伪静态的切换。当然,这里有个小细节,如果你的网站之前是纯静态的,切换伪静态后,之前生成的静态HTML文件可能需要清理一下,或者确保伪静态规则的优先级更高,避免混淆。我个人经验是,最好在测试环境先跑一遍,确认没问题再上线,毕竟URL结构变化对SEO还是有影响的。
-
服务器伪静态规则配置 这一步是核心,它决定了服务器如何解析你那些“假装是静态”的URL。不同的服务器环境有不同的配置方式。
-
Apache服务器(使用.htaccess文件) 如果你的服务器是Apache,并且开启了
mod_rewrite
模块(通常默认是开的,如果不行需要联系主机商或自己检查httpd.conf
),你需要在网站根目录下创建一个名为.htaccess
的文件(如果已经有,就编辑它)。把DedeCMS官方提供的或者我们常用的伪静态规则粘贴进去。 举个例子,一个基础的DedeCMS伪静态规则可能长这样:RewriteEngine On RewriteBase / # 文章页 RewriteRule ^(.*)/view_([0-9]+)_([0-9]+)_([0-9]+).html$ $1/view.php?aid=$2&pre=$3&next=$4 [L] RewriteRule ^(.*)/view_([0-9]+)_([0-9]+).html$ $1/view.php?aid=$2&PageNo=$3 [L] RewriteRule ^(.*)/view_([0-9]+).html$ $1/view.php?aid=$2 [L] # 列表页 RewriteRule ^(.*)/list_([0-9]+)_([0-9]+)_([0-9]+).html$ $1/list.php?tid=$2&totalresult=$3&PageNo=$4 [L] RewriteRule ^(.*)/list_([0-9]+)_([0-9]+).html$ $1/list.php?tid=$2&PageNo=$3 [L] RewriteRule ^(.*)/list_([0-9]+).html$ $1/list.php?tid=$2 [L] # 标签页 RewriteRule ^tags.html$ tags.php [L] RewriteRule ^tags-(.*).html$ tags.php?/$1 [L] # 归档页 RewriteRule ^arclist-(.*).html$ arclist.php?/$1 [L] # 解决老版本DedeCMS动态链接兼容性问题(可选,如果你的链接还存在-htm-格式) RewriteRule ^(.*)-htm-(.*)$ $1.php?$2 [L] 注意
RewriteBase /
这行,如果你的DedeCMS安装在子目录,比如www.yourdomain.com/dede/
,那么这行需要改为RewriteBase /dede/
。这是一个常被忽略的小细节,却能导致整个伪静态失效。 -
Nginx服务器 Nginx的配置方式与Apache不同,它没有
.htaccess
文件,规则直接写在Nginx的配置文件里(通常是nginx.conf
或者网站对应的vhost
配置文件)。找到你的网站server
块,在location /
块中添加伪静态规则。 Nginx的规则通常这样写:location / { # 尝试直接访问文件或目录,如果不存在,则进行rewrite try_files $uri $uri/ /index.php?$args; # DedeCMS伪静态规则 rewrite ^/(.*)/view_([0-9]+)_([0-9]+)_([0-9]+).html$ /$1/view.php?aid=$2&pre=$3&next=$4 last; rewrite ^/(.*)/view_([0-9]+)_([0-9]+).html$ /$1/view.php?aid=$2&PageNo=$3 last; rewrite ^/(.*)/view_([0-9]+).html$ /$1/view.php?aid=$2 last; rewrite ^/(.*)/list_([0-9]+)_([0-9]+)_([0-9]+).html$ /$1/list.php?tid=$2&totalresult=$3&PageNo=$4 last; rewrite ^/(.*)/list_([0-9]+)_([0-9]+).html$ /$1/list.php?tid=$2&PageNo=$3 last; rewrite ^/(.*)/list_([0-9]+).html$ /$1/list.php?tid=$2 last; rewrite ^/tags.html$ /tags.php last; rewrite ^/tags-(.*).html$ /tags.php?/$1 last; rewrite ^/arclist-(.*).html$ /arclist.php?/$1 last; # 兼容老版本DedeCMS的-htm-格式 rewrite ^/(.*)-htm-(.*)$ /$1.php?$2 last; }配置完Nginx后,记得要
sudo nginx -t
检查配置语法,然后sudo nginx -s reload
重载Nginx服务,让新的规则生效。如果Nginx配置有误,网站可能会直接502或500,所以务必小心。
-
DedeCMS伪静态的常见误区与排查方法
在设置DedeCMS伪静态时,我遇到过不少坑,有些问题看起来很玄乎,其实多半是些小细节没到位。这里我总结了一些常见的误区和排查思路,希望能帮你少走弯路。
首先,最常见的误区就是服务器环境问题。比如Apache没开
mod_rewrite模块,或者Nginx配置完没重载服务。我见过太多次,用户把规则写好了,DedeCMS后台也开了伪静态,结果页面还是404。这时候,第一步就是检查服务器日志(Apache的
error_log或Nginx的
error.log),看有没有关于rewrite的错误信息。如果日志里一片空白,那很可能是模块压根没加载,或者权限问题导致
.htaccess文件没生效。
其次是规则冲突或不完整。DedeCMS的伪静态规则相对复杂,因为它要处理文章、列表、标签、搜索等多种页面类型。如果你是从网上随便找了一段规则,很可能不适用于你的DedeCMS版本或者你的特定需求。我建议总是从DedeCMS官方论坛或可靠的资源获取最新的规则。另外,如果你的网站根目录还有其他应用(比如WordPress、Discuz!),它们的
.htaccess文件或Nginx配置也可能有自己的rewrite规则,这很容易导致冲突。排查时,可以尝试只保留DedeCMS的规则,看是否生效,再逐步添加其他应用的规则,找出冲突点。
再来就是DedeCMS后台设置与缓存问题。有些DedeCMS版本,在开启伪静态后,需要手动更新一下系统缓存或者生成一下HTML。如果这些步骤没做,系统可能还在使用旧的URL生成逻辑。此外,浏览器缓存、CDN缓存也可能捣乱,让你误以为伪静态没生效。所以,每次修改后,清空浏览器缓存,或者用隐身模式访问,甚至清除CDN缓存,都是非常必要的排查步骤。我个人习惯是,改完规则,立刻用
curl -I yourdomain.com/some-pseudo-static-url.html命令,直接从服务器获取HTTP头信息,看返回的状态码是不是200,以及有没有重定向,这比浏览器访问要直接得多。
最后,路径问题。如果DedeCMS安装在子目录,比如
http://www.example.com/cms/,那么Apache的
RewriteBase就必须设置为
/cms/,Nginx的规则也需要相应调整,在
rewrite规则前面加上
/cms。这个错误非常隐蔽,因为通常我们都是在根目录部署,一旦遇到子目录部署,很容易忽略这个细节。
本版本为春节前最后版本,主要是改进SP2的BUG以及处理多版本共存问题。V3将在春节后公布开发进度!改进以下功能: 后台帐号admin 密码:3hooCMS 程序版本:3hooCMS V2 SP2修正组件支持,后台提供组件支持设置,无组件环境关闭组件支持也可以使用。 修正默认模版IE6兼容问题。 重写伪静态规则,空间支持伪静态可以后台开启伪静态。 更新双语默认模版。 默认模版重写调用演示!写出最大
Apache与Nginx服务器的伪静态规则实战
说起伪静态规则,Apache和Nginx虽然目的相同,但语法和实现逻辑差异不小。理解这些差异,能让你在实际操作中更游刃有余。
Apache的.htaccess
规则:
Apache的
mod_rewrite模块非常强大,它的规则写在网站根目录的
.htaccess文件中。这个文件是分布式配置,意味着你可以为每个目录设置不同的规则,非常灵活。
RewriteEngine On RewriteBase / # 如果DedeCMS在子目录,如/dede/,则改为RewriteBase /dede/ # DedeCMS文章页规则: # 例如:/news/view_123_1.html -> /news/view.php?aid=123&PageNo=1 RewriteRule ^(.*)/view_([0-9]+)_([0-9]+)_([0-9]+).html$ $1/view.php?aid=$2&pre=$3&next=$4 [L,QSA] RewriteRule ^(.*)/view_([0-9]+)_([0-9]+).html$ $1/view.php?aid=$2&PageNo=$3 [L,QSA] RewriteRule ^(.*)/view_([0-9]+).html$ $1/view.php?aid=$2 [L,QSA] # DedeCMS列表页规则: # 例如:/list/list_1_1.html -> /list/list.php?tid=1&PageNo=1 RewriteRule ^(.*)/list_([0-9]+)_([0-9]+)_([0-9]+).html$ $1/list.php?tid=$2&totalresult=$3&PageNo=$4 [L,QSA] RewriteRule ^(.*)/list_([0-9]+)_([0-9]+).html$ $1/list.php?tid=$2&PageNo=$3 [L,QSA] RewriteRule ^(.*)/list_([0-9]+).html$ $1/list.php?tid=$2 [L,QSA] # DedeCMS标签页规则: # 例如:/tags-php.html -> /tags.php?/php RewriteRule ^tags.html$ tags.php [L,QSA] RewriteRule ^tags-(.*).html$ tags.php?/$1 [L,QSA] # DedeCMS归档页规则: # 例如:/arclist-2023-01.html -> /arclist.php?/2023-01 RewriteRule ^arclist-(.*).html$ arclist.php?/$1 [L,QSA] # DedeCMS老版本兼容性规则(如果你的网站存在-htm-格式的链接,例如/a/b-htm-c.php?d=e) RewriteRule ^(.*)-htm-(.*)$ $1.php?$2 [L,QSA] # 阻止直接访问某些敏感文件(可选,但推荐) RewriteRule ^data/(.*)$ - [F] RewriteRule ^templets/(.*).php$ - [F] RewriteRule ^member/(.*).php$ - [F]
这里的
[L]表示
Last,即匹配到此规则后停止后续规则的匹配;
[QSA]表示
Query String Append,会将原始请求中的查询字符串附加到重写后的URL后面,这对于某些带有额外参数的链接很重要。我个人倾向于加上
QSA,以防万一。
Nginx的配置规则:
Nginx处理请求的效率更高,但它的配置语法更严格,没有
.htaccess这样的分布式文件,所有规则都集中在
nginx.conf或其包含的配置文件中。
server {
listen 80;
server_name yourdomain.com;
root /path/to/your/dedecms; # 你的DedeCMS网站根目录
index index.html index.htm index.php;
location / {
# 如果请求的文件或目录存在,则直接访问
try_files $uri $uri/ /index.php?$args;
# DedeCMS伪静态规则
# Nginx的rewrite规则需要以'/'开头,并且通常使用'last'或'break'
# 'last'表示停止当前location块的匹配,并重新发起内部请求到新的URI
# 'break'表示停止当前rewrite模块的匹配,继续在当前location块中处理新的URI
# 文章页
rewrite ^/(.*)/view_([0-9]+)_([0-9]+)_([0-9]+).html$ /$1/view.php?aid=$2&pre=$3&next=$4 last;
rewrite ^/(.*)/view_([0-9]+)_([0-9]+).html$ /$1/view.php?aid=$2&PageNo=$3 last;
rewrite ^/(.*)/view_([0-9]+).html$ /$1/view.php?aid=$2 last;
# 列表页
rewrite ^/(.*)/list_([0-9]+)_([0-9]+)_([0-9]+).html$ /$1/list.php?tid=$2&totalresult=$3&PageNo=$4 last;
rewrite ^/(.*)/list_([0-9]+)_([0-9]+).html$ /$1/list.php?tid=$2&PageNo=$3 last;
rewrite ^/(.*)/list_([0-9]+).html$ /$1/list.php?tid=$2 last;
# 标签页
rewrite ^/tags.html$ /tags.php last;
rewrite ^/tags-(.*).html$ /tags.php?/$1 last;
# 归档页
rewrite ^/arclist-(.*).html$ /arclist.php?/$1 last;
# 老版本兼容
rewrite ^/(.*)-htm-(.*)$ /$1.php?$2 last;
}
# PHP文件处理
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php-fpm.sock; # 你的PHP-FPM socket路径
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# 阻止直接访问敏感目录(推荐)
location ~ /(data|templets|member|install)/ {
deny all;
}
}Nginx的
try_files指令非常重要,它首先









