后台设置(推荐首选)
这是最简单的方法,适用于大多数情况,织梦CMS本身就提供了这个选项。

- 登录织梦后台:使用您的管理员账号登录网站的后台管理系统。
- 进入核心设置:在左侧菜单栏中,找到并点击 「系统」 -> 「系统基本参数」。
- 修改栏目选项:
- 在右侧的参数设置列表中,找到 「核心设置」 这一项。
- 找到名为 「栏目默认页的名称」 的选项。
- 将其默认值
index.html修改为index。 - 点击页面底部的 「保存」 按钮。
完成这一步后,所有顶级栏目的链接后缀都会被自动去掉。
- 修改前:
https://www.yourdomain.com/about/index.html - 修改后:
https://www.yourdomain.com/about/
注意:这个设置通常只对顶级栏目有效,对于二级、三级等子栏目,可能还需要配合下面的方法二。
修改核心文件(适用于子栏目和特殊情况)
如果后台设置后,子栏目仍然带有 .html 后缀,或者您希望所有层级的栏目都不带后缀,就需要修改织梦的核心程序文件。
⚠️ 重要提醒:

- 备份!备份!备份! 在修改任何核心文件之前,请务必备份您的网站文件和数据库,以防操作失误导致网站无法访问。
- 织梦版本差异:不同版本的织梦文件路径和代码可能略有不同,以下方法基于较新和较常见的版本(如 DedeCMS 5.7)。
步骤 1:修改 arc.listview.class.php 文件
这个文件用于处理列表页的URL生成。
-
找到文件:通过FTP或主机文件管理器,进入您的网站根目录,找到以下路径:
/include/arc.listview.class.php -
编辑文件:用代码编辑器(如 VS Code, Sublime Text, Notepad++)打开这个文件。
-
定位并修改代码:
(图片来源网络,侵删)-
按下
Ctrl + F搜索关键字GetFileUrl。 -
您会找到一个名为
GetFileUrl的函数,找到其中一行类似这样的代码:$this->Fields['typeurl'] = GetFileUrl($this->Fields['id'],$this->Fields['typeid'],'',$this->Fields['ismake'],$this->Fields['arcrank'],$this->Fields['namerule'],$this->Fields['typedir'],$this->Fields['money'],$this->Fields['filename'],$this->Fields['moresite'],$this->Fields['siteurl'],$this->Fields['sitepath']);
-
我们需要找到
GetFileUrl这个函数的定义,并修改它,继续在文件中搜索function GetFileUrl。 -
在
GetFileUrl函数内部,找到处理.html后缀的逻辑,通常是在函数的末尾,有一行类似这样的代码:// $defaultname = empty($defaultname) ? 'index.html' : $defaultname;
注意:这行代码在有些版本里是注释掉的,但关键在于它下面的逻辑,找到生成URL的核心部分,它通常是一个
return语句,并且会包含$namerule变量。 -
更准确的方法是,找到生成URL的
return语句,并移除其中的.html,找到类似下面这样的代码块:// ... 函数内部逻辑 ... if($isremote == 2 && $isurl == 1) { // ... 远程文件处理 ... } else { $murl = $typedir.'/'.$defaultname; } return $murl;您需要确保
$defaultname变量在传递进来时就不包含.html,最稳妥的修改是,在return语句之前,对$defaultname进行一次处理。 -
推荐的修改代码:在
GetFileUrl函数的末尾,return语句之前,添加以下代码,将所有.html后缀替换为空:// 在 return 语句之前添加 $defaultname = preg_replace('/\.html$/i', '', $defaultname);修改后的代码片段可能看起来像这样:
// ... 函数前面的逻辑 ...
// 在 return 语句之前,添加这行 $defaultname = preg_replace('/.html$/i', '', $defaultname);
$murl = $typedir.'/'.$defaultname; return $murl;
* **保存文件**。 -
步骤 2:修改 channelunit.class.php 文件
这个文件用于处理栏目页和文章页的URL。
-
找到文件:路径通常在:
/include/channelunit.class.php -
编辑文件:用代码编辑器打开。
-
定位并修改代码:
- 搜索
GetDefaultUrl函数。 - 在这个函数内部,找到生成栏目首页URL的代码,通常是一个
switch语句或if判断,处理$isdefault == 1的情况。 - 您会看到类似这样的代码:
case 'index': case 'default': $reurl = $GLOBALS['cfg_phpurl']."/list.php?tid=".$typeid; break;
这步很重要:织梦默认情况下,栏目首页(如
/about/)是通过list.php伪静态生成的,而我们希望的是直接访问目录(如/about/),这里的逻辑需要修改。 - 修改
case 'default':的部分,让它返回目录形式的URL:case 'index': case 'default': // 将原来的伪静态URL修改为目录形式的URL $typedir = $this->TypeInfos['typedir']; $typedir = preg_replace('/^..\//', '/', $typedir); // 处理 ../ 开头的路径 $reurl = $typedir.'/'; // 确保以 / break; - 保存文件。
- 搜索
服务器伪静态规则(确保访问正常)
去掉了 .html 后缀,实际上是将网站的URL从静态形式改为了目录形式,为了让服务器能正确识别并处理这种URL,您需要配置服务器的伪静态规则。
-
登录您的虚拟主机控制面板(如 cPanel, 宝塔面板等)或通过FTP访问服务器。
-
找到伪静态配置文件:
- Apache服务器:在网站根目录下创建或修改
.htaccess文件。 - Nginx服务器:修改 Nginx 的配置文件(通常在
/etc/nginx/sites-available/目录下),或者在宝塔面板中直接设置伪静态规则。
- Apache服务器:在网站根目录下创建或修改
-
添加对应的规则:
-
Apache (.htaccess) 规则:
<IfModule mod_rewrite.c> RewriteEngine On # 确保目录斜杠存在 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php [L,E=PATH_INFO:$1] </IfModule>这个规则会将所有不存在的文件和目录的请求,都转发到
index.php处理。 -
Nginx (nginx.conf) 规则:
location / { if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=$1 last; break; } }在宝塔面板中,您可以直接选择“织梦CMS”的伪静态模板,它会自动生成正确的规则。
-
总结步骤
- 后台设置:进入
系统->系统基本参数->核心设置,将栏目默认页的名称改为index,并保存,这是最基础的一步。 - 文件修改:如果子栏目仍有后缀,修改
include/arc.listview.class.php和include/channelunit.class.php文件,移除.html后缀逻辑。 - 伪静态配置:确保服务器(Apache或Nginx)配置了正确的伪静态规则,使不带后缀的URL能够正常访问。
按照以上步骤操作,您的织梦网站栏目就可以成功去掉 .html 后缀了,如果在操作过程中遇到问题,请首先检查文件备份,并根据错误信息排查是哪个环节出了问题。
