如何让WordPress忽略文件URL多余点号 识别.jpg后缀解决415错误
解决WordPress识别多后缀文件返回415错误的方案
方案1:通过WordPress钩子修正MIME识别逻辑
WordPress默认的文件类型检测逻辑对文件名带多个点的场景支持不佳,你可以添加以下代码到当前主题的functions.php文件,或者自定义功能插件中,强制仅使用文件最后一个后缀判断MIME类型:
add_filter('wp_check_filetype_and_ext', 'fix_multi_dot_file_mime_recognition', 10, 4); function fix_multi_dot_file_mime_recognition($filetype, $file, $filename, $mimes) { // 仅处理上传目录的文件,不影响其他业务逻辑 if (strpos($file, WP_CONTENT_DIR . '/uploads/') === false) { return $filetype; } // 提取最后一个点后的后缀 $ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION)); if (empty($ext)) { return $filetype; } // 匹配WordPress内置的MIME映射规则 $mime_types = wp_get_mime_types(); foreach ($mime_types as $exts => $mime) { if (in_array($ext, explode('|', $exts), true)) { $filetype['ext'] = $ext; $filetype['type'] = $mime; $filetype['proper_filename'] = $filename; break; } } return $filetype; }
添加后清空缓存即可生效,所有上传目录下的文件都会按最后一个后缀识别格式。
方案2:服务器层面配置(适用于415由服务端直接返回的场景)
如果请求没有走到WordPress逻辑就返回415,可直接修改服务器配置,强制上传目录的文件按最后一个后缀返回正确的Content-Type头:
Nginx配置
在站点的Nginx配置server块中添加以下规则:
location ~* ^/wp-content/uploads/.*\.([a-zA-Z0-9]+)$ { types { image/jpeg jpg jpeg; image/png png; image/gif gif; # 可自行扩展其他需要支持的后缀和对应MIME类型 } try_files $uri =404; }
修改后执行nginx -s reload重载配置即可。
Apache配置
在wp-content/uploads目录下新建.htaccess文件,添加以下内容:
<IfModule mod_mime.c> RemoveType .* AddType image/jpeg .jpg .jpeg AddType image/png .png AddType image/gif .gif # 可自行扩展其他需要支持的后缀和对应MIME类型 </IfModule>
保存后即可生效。
内容的提问来源于stack exchange,提问作者Sammy
相关产品推荐
相关产品推荐

