在 WordPress 后台尝试上传文件时,有时会遇到“抱歉,由于安全原因,这个文件类型不受支持。”的错误提示。这通常是因为 WordPress 出于安全考虑,默认限制了某些文件类型的上传。
问题原因
WordPress 有一个内置的允许上传的文件类型列表。常见的图片格式(如 .jpg, .png, .gif)、文档格式(如 .pdf, .docx)等都在允许列表中。如果尝试上传的文件扩展名或 MIME 类型不在这个列表中,就会触发此安全错误。
注意:原文中提到的“WordPress上传文件不支持.jpg格式”是不准确的。.jpg/.jpeg 是 WordPress 核心完全支持的图片格式。此错误更可能发生在尝试上传一些非常规文件类型时,例如某些特定的压缩包、可执行文件或服务器脚本文件。
解决方法
解决此问题主要有两种思路:一是彻底解除限制(不推荐),二是安全地添加特定文件类型。
方法一:彻底解除上传类型限制(不推荐)
在网站的 wp-config.php 文件中添加以下代码:
define('ALLOW_UNFILTERED_UPLOADS', true);
重要警告:此方法将允许上传任何类型的文件,包括潜在的恶意脚本(如 .php, .js)。这会极大增加网站的安全风险,仅应在完全信任所有上传用户且明确知晓后果的情况下使用,对于绝大多数网站,强烈不推荐。
方法二:安全地添加允许的文件类型(推荐)
通过主题的 functions.php 文件或自定义功能插件,使用 upload_mimes 过滤器来添加或修改允许上传的文件类型。这是最安全、最标准的做法。
例如,假设你需要允许上传 .svg 文件:
// 将以下代码添加到主题的 functions.php 文件或自定义插件中
function my_custom_upload_mimes( $existing_mimes ) {
// 添加 .svg 文件类型
$existing_mimes['svg'] = 'image/svg+xml';
// 你还可以添加其他类型,例如 Keynote 文件
// $existing_mimes['key'] = 'application/vnd.apple.keynote';
return $existing_mimes;
}
add_filter( 'upload_mimes', 'my_custom_upload_mimes' );
添加代码后,保存文件,然后再次尝试上传之前被阻止的文件类型。
排查步骤
如果上述方法二未能解决问题,请按以下步骤排查:
- 确认文件类型: 检查你尝试上传的文件扩展名和实际 MIME 类型是否匹配。有时文件扩展名被错误修改会导致此问题。
- 检查插件冲突: 停用所有插件,然后尝试上传。如果成功,再逐个启用插件以找出是哪个插件导致了限制。
- 检查服务器限制: 某些服务器(如 Nginx)或安全软件(如 ModSecurity)可能有自己的文件上传限制规则,需要联系主机商确认。
- 检查文件大小: 虽然错误提示不同,但也需确认文件未超过
upload_max_filesize和post_max_size(可在 WordPress 后台“工具”-“站点健康”-“信息”-“媒体”中查看)。
总结
遇到“由于安全原因,这个文件类型不受支持”错误时,首选方案是使用方法二,通过代码安全地扩展允许上传的文件类型列表。避免使用 ALLOW_UNFILTERED_UPLOADS 常量,除非在绝对可控的环境下。始终将网站安全放在首位。