织梦为了防止恶意代码注入和提升网站安全性,默认会页(如文章、栏目页)中直接使用 <a> 标签链接到外部网站。

下面我将为您详细解释原因,并提供多种解决方案,从最简单到最彻底,您可以根据自己的需求选择。
问题根源分析
织梦的编辑器(无论是旧版的 DEDEditor 还是新版的 ckeditor)在保存内容时,会执行一个过滤函数,这个函数会检查文章内容中的标签和属性。
- 默认过滤规则:默认情况下,织梦会过滤掉所有
target="_blank"属性,并且会阻止或修改完整的<a href="http://外部网址">链接,将其转换为站内链接或直接移除。 - 目的:防止用户在不知情的情况下,被恶意脚本引导到外部钓鱼网站,也防止网站权重(SEO中的“权重传递”)被过多地导出到外部站点。
解决方案(按推荐顺序)
修改后台设置(最推荐,最安全)
这是最简单、最正规且最安全的解决方法,织梦官方其实提供了一个开关来控制是否允许新窗口打开链接。
- 登录您的织梦后台。
- 进入 “系统” -> “系统基本参数”。
- 在左侧菜单中找到并点击 “核心设置”。
- 在右侧的设置列表中,找到 “是否开启新窗口打开链接” 这个选项。
- 将其值从 “
N” 修改为 “Y”。 - 点击页面底部的 “ 确定 ” 按钮保存。
效果:

- 这样修改后,您在文章中使用
<a href="http://www.baidu.com" target="_blank">百度</a>这样的代码,织梦将不再过滤target="_blank"属性。 - 但是,这个设置主要解决的是
target="_blank"的问题,如果外部链接仍然被替换,请尝试下面的方案二。
修改文件过滤规则(治本方法)
如果方案一无效,说明您的织梦版本可能被修改过,或者过滤规则更严格,我们需要找到并修改那个执行过滤的PHP文件。
织梦V5.7及之前版本的核心过滤文件是:/include/helpers/filter.helper.php
-
使用FTP或文件管理器,登录您的网站服务器,找到并下载
/include/helpers/filter.helper.php文件到本地。 -
用代码编辑器(如 VS Code, Sublime Text, Dreamweaver)打开这个文件。
-
查找关键代码:在文件中搜索
dedecms或者filter_hr等关键词,找到负责过滤<a>标签的代码段,通常看起来像这样:// 示例代码,具体行号和内容可能因版本而异 if(!preg_match("#^http|^ftp|^file|^https|^ftps#", $href)) { $href = $GLOBALS['cfg_basehost'].$href; } // 或者 // $href = preg_replace("/(<a(.*))(target=[^>]*)/i", "\\1", $href); // 这行是移除target属性的 // $href = preg_replace('/<a\s+.*?(href=["|\']?[^"\'\s>]+)["|\']?[^>]*>/i', '<a \\1>', $href); // 这行是规范a标签的 -
修改或注释代码:
- 情况A:强制转为站内链接,如果您看到类似
if(!preg_match("#^http#"...))的代码,它的意思是“如果不是以 http 开头的,就加上网站域名”,您可以将这个判断条件修改为允许外部链接,将!preg_match("#^http|^ftp|..."改为!preg_match("#^/|^http|^ftp|...",这样以 开头的绝对路径和外部链接都能保留。 - 情况B:直接移除过滤逻辑,最简单粗暴但有效的方法是,将整个处理外部链接的代码块用 注释掉,或者直接删除。(注意:这会降低网站安全性,请确保您信任所有内容发布者。)
示例(注释掉一段强制转为站内链接的代码):
// 原始代码 if(!preg_match("#^http|^ftp|^file|^https|^ftps#", $href)) { $href = $GLOBALS['cfg_basehost'].$href; } // 修改后(注释掉) /* if(!preg_match("#^http|^ftp|^file|^https|^ftps#", $href)) { $href = $GLOBALS['cfg_basehost'].$href; } */ - 情况A:强制转为站内链接,如果您看到类似
-
保存文件并上传:将修改后的文件重新上传到服务器,覆盖原文件。
使用自定义模型或字段(高级方法)
如果您只是想在特定的几个栏目或文章中允许外部链接,并且不希望影响全站,可以使用织梦的“自定义模型”功能。
-
创建自定义模型:
- 进入 “核心” -> “内容模型管理” -> “增加一个内容模型”。
- 为模型命名,外部链接文章”。
- 在模型字段中,添加一个“单行文本”类型的字段,命名为
externallink(字段别名),并在“字段参数”中填写提示文字,如“请输入外部链接地址 (http://...)”。
-
创建对应栏目:
- 进入 “栏目” -> “添加栏目”。
- 在“栏目内容模型”中选择您刚刚创建的“外部链接文章”模型。
-
修改模板:
- 找到这个栏目使用的文章列表模板(
list_article_XXX.htm)和文章内容页模板(article_XXX.htm)。 - 在模板中,使用织梦的标签来调用这个自定义字段。
- 列表页示例:
<a href="[field:externallink/]" target="_blank">[field:title/]</a>
- 内容页示例:
<a href="{dede:field name='externallink'/}" target="_blank">点击访问外部链接</a>
- 找到这个栏目使用的文章列表模板(
优点:非常灵活,安全,不影响其他内容。 缺点:操作相对复杂,需要为特定内容单独创建模型和栏目。
使用插件或模块
织梦的官方或第三方市场有一些专门解决此问题的插件或模块,您可以在织梦官方论坛或相关资源网站搜索“外部链接”、“允许外链”等关键词来寻找。
优点:通常有图形化界面,操作简单。 缺点:可能需要付费,且插件的兼容性和安全性需要自行评估。
总结与建议
| 方案 | 优点 | 缺点 | 推荐度 |
|---|---|---|---|
| 修改后台设置 | 最简单、最安全、最官方 | 可能对某些版本或修改过的系统无效 | ★★★★★ |
| 修改过滤文件 | 治本,一劳永逸 | 需要修改代码,有安全风险(操作不当) | ★★★★☆ |
| 自定义模型 | 非常灵活、安全 | 操作复杂,适用于特定场景 | ★★★☆☆ |
| 使用插件 | 操作简单,有界面 | 可能收费,兼容性待考 | ★★☆☆☆ |
给您的建议:
- 首先尝试方案一,这是最应该优先尝试的。
- 如果方案一无效,再尝试方案二,在修改文件前,务必先备份原文件,以防修改出错导致网站问题。
- 如果您的需求非常特殊,比如只在某个新闻聚合栏目大量使用外链,再考虑方案三。
- 方案四可以作为备选,但优先级最低。
希望这些详细的步骤能帮助您解决问题!
