您的Web服务器(如Apache或Nginx)没有开启URL重写功能,或者.htaccess(或Nginx的rewrite规则)文件配置有误/缺失。

当您生成栏目时,如果栏目设置了“使用目录html”(即生成静态HTML页面),DedeCMS会生成一个如 /about/index.html 的文件,这时,如果服务器配置正确,访问 /about/ 就会自动显示 /about/index.html 的内容。
但如果服务器没有正确配置,当您访问 /about/ 时,服务器会去寻找一个名为 /about/ 的文件夹,而不是一个名为 index.html 的文件,因为DedeCMS并没有生成一个名为 /about/ 的文件夹,所以服务器会返回“404 Not Found”错误,导致页面无法显示。
而当您访问 index.html 时,因为文件真实存在,所以可以正常显示。
解决方案
请根据您的Web服务器类型,选择对应的解决方案:

Apache 服务器(最常见)
这是最常见的情况,尤其是使用虚拟主机的用户,Apache服务器需要通过 .htaccess 文件来开启URL重写。
步骤 1:检查并修改 .htaccess 文件
-
通过FTP或文件管理器,登录您的网站根目录(通常是
/public_html或/wwwroot)。 -
找到名为
.htaccess的文件,如果没有,请手动创建一个。
(图片来源网络,侵删) -
用文本编辑器打开
.htaccess文件,确保其内容包含以下代码:<IfModule mod_rewrite.c> RewriteEngine On # 以下两行代码很重要,确保重写规则只针对根目录下的文件和目录 RewriteBase / # 如果请求的是一个目录或文件,并且真实存在,则直接访问,不进行重写 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 如果请求的不是真实文件或目录,则将请求重写到 index.php RewriteRule . /index.php [L] </IfModule>RewriteEngine On:开启URL重写引擎。RewriteBase /:设置重写的基准目录为网站根目录。RewriteCond ... !-f:判断请求的URL是否不是一个存在的文件。RewriteCond ... !-d:判断请求的URL是否不是一个存在的目录。RewriteRule . /index.php [L]:如果以上两个条件都满足(即请求的文件/目录不存在),就将所有请求都交给index.php处理,这正是DedeCMS伪静态的核心。
步骤 2:检查Apache模块是否开启
.htaccess 文件配置正确但仍不生效,可能是Apache服务器没有加载 mod_rewrite 模块,您需要联系您的空间商或服务器管理员,确认 mod_rewrite 模块是否已启用,对于Linux服务器,通常可以通过 a2enmod rewrite 命令来启用,然后重启Apache服务。
步骤 3:设置目录权限
确保您的网站根目录(.htaccess 文件所在目录)具有正确的执行权限(通常是 755)。
Nginx 服务器
如果您使用的是Nginx,配置方式与Apache不同,需要在Nginx的虚拟主机配置文件(nginx.conf 或站点配置文件)中进行设置。
步骤 1:修改Nginx配置文件
-
登录您的服务器,找到Nginx的配置文件,通常是
/etc/nginx/nginx.conf或在/etc/nginx/sites-available/目录下的站点配置文件。 -
在您的
server块中,添加或修改以下rewrite规则:server { listen 80; server_name yourdomain.com; root /path/to/your/website; # 您网站的根目录 # ... 其他配置 ... # 关键的伪静态规则 location / { try_files $uri $uri/ /index.php?$query_string; } # 如果您开启了DedeCMS的会员中心等功能,还需要以下规则 location /dedecms/ { # 如果您的后台目录不是dedecms,请相应修改 index index.php index.html; if (!-e $request_filename) { rewrite ^/dedecms/(.*)$ /dedecms/index.php/$1 last; } } # ... 其他配置,如PHP处理 ... location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; # 或 unix:/var/run/php/php7.4-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }try_files $uri $uri/ /index.php?$query_string;:这是Nginx处理伪静态的核心指令,它会按顺序尝试:- 访问请求的URI(如
/about/)。 - 如果URI是目录,则尝试访问目录下的
index文件。 - 如果以上都失败,则将请求交给
/index.php处理,并传递原始的查询字符串。
- 访问请求的URI(如
步骤 2:重启Nginx服务
保存配置文件后,执行以下命令重启Nginx使配置生效:
sudo nginx -t # 测试配置文件语法是否正确 sudo systemctl restart nginx # 重启Nginx服务
临时解决方案(不推荐,但可快速验证)
如果您无法修改服务器配置,可以暂时通过以下方法解决问题,但这不是长久之计。
- 生成栏目时,取消勾选“使用目录html”。
- 这样,DedeCMS会生成一个如
/about.html的文件。 - 访问时,您就需要输入完整的URL,
http://www.yourdomain.com/about.html而不是http://www.yourdomain.com/about/。
这个方法虽然能显示内容,但URL不美观,且不利于SEO。
总结与排查清单
- 确认问题:访问栏目目录(如
/about/)时显示404,但访问index.html(如/about/index.html)时正常。 - 确定服务器类型:您用的是Apache还是Nginx?可以联系空间商或查看服务器信息。
- 检查配置文件:
- Apache:检查网站根目录下的
.htaccess文件,确保内容正确无误。 - Nginx:检查
nginx.conf或站点配置文件,确保try_files规则已添加到正确的location块。
- Apache:检查网站根目录下的
- 检查模块/服务:
- Apache:确认
mod_rewrite模块已启用。 - Nginx:修改配置后,务必重启Nginx服务。
- Apache:确认
- 检查权限:确保网站目录和
.htaccess文件有正确的读写和执行权限。
按照以上步骤逐一排查,99%的“dede生成栏目不带html无法显示”问题都能得到解决,如果问题依旧,建议您提供您的服务器类型和具体的错误信息,以便进一步分析。
