博客 / WordPress/ WordPress 解决“由于安全原因,这个文件类型不受支持”错误

WordPress 解决“由于安全原因,这个文件类型不受支持”错误

WordPress 解决“由于安全原因,这个文件类型不受支持”错误

在 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' );

添加代码后,保存文件,然后再次尝试上传之前被阻止的文件类型。

排查步骤

如果上述方法二未能解决问题,请按以下步骤排查:

  1. 确认文件类型: 检查你尝试上传的文件扩展名和实际 MIME 类型是否匹配。有时文件扩展名被错误修改会导致此问题。
  2. 检查插件冲突: 停用所有插件,然后尝试上传。如果成功,再逐个启用插件以找出是哪个插件导致了限制。
  3. 检查服务器限制: 某些服务器(如 Nginx)或安全软件(如 ModSecurity)可能有自己的文件上传限制规则,需要联系主机商确认。
  4. 检查文件大小: 虽然错误提示不同,但也需确认文件未超过 upload_max_filesizepost_max_size(可在 WordPress 后台“工具”-“站点健康”-“信息”-“媒体”中查看)。

总结

遇到“由于安全原因,这个文件类型不受支持”错误时,首选方案是使用方法二,通过代码安全地扩展允许上传的文件类型列表。避免使用 ALLOW_UNFILTERED_UPLOADS 常量,除非在绝对可控的环境下。始终将网站安全放在首位。

发表评论

您的邮箱不会公开。必填项已用 * 标注。