WordPress站点点击docx文件直接打开而非下载问题如何解决
问题原因
- 核心诱因是共享主机的OpenLiteSpeed服务未配置
.docx后缀对应的正确MIME类型,默认将docx格式的二进制文件识别为text/plain纯文本类型,浏览器收到响应后不会触发下载逻辑,直接将二进制内容当做纯文本渲染,就会出现乱码问题。 - 你本地VM的Almalinux环境默认内置了正确的MIME类型映射规则,因此docx下载功能正常。
- 你提供的WordPress默认重写规则无异常,规则中已配置真实存在的文件不会走WP路由逻辑,因此和重写规则无关。
解决方案
根据你共享主机的权限不同,可选择以下任意一种方法处理:
- 修改站点根目录.htaccess文件(优先推荐)
OpenLiteSpeed默认支持解析.htaccess规则,直接在你现有重写规则下方添加以下配置即可:
首先尝试添加正确的MIME类型映射:
<IfModule mod_mime.c> AddType application/vnd.openxmlformats-officedocument.wordprocessingml.document .docx </IfModule>
如果添加后仍未生效,可直接强制配置docx文件走下载逻辑:
<FilesMatch "\.(docx)$"> Header set Content-Disposition "attachment" </IfModule>
修改完成后重载OpenLiteSpeed站点配置,清理浏览器缓存后即可测试生效。
2. 主机面板配置MIME类型
如果共享主机不允许自定义.htaccess规则,可登录主机控制面板找到「MIME类型配置」功能,手动添加.docx后缀对应的MIME值为application/vnd.openxmlformats-officedocument.wordprocessingml.document,保存后生效。
3. WordPress层面兼容处理
如果上述服务端配置都无权限操作,可将以下代码添加到当前激活主题的functions.php文件中,通过WP动态输出正确的响应头:
function custom_docx_download_header() { if (is_404()) { $requested_file = $_SERVER['REQUEST_URI']; if (preg_match('/\.docx$/', $requested_file) && file_exists(ABSPATH . ltrim($requested_file, '/'))) { header('Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document'); header('Content-Disposition: attachment; filename="' . basename($requested_file) . '"'); readfile(ABSPATH . ltrim($requested_file, '/')); exit; } } } add_action('template_redirect', 'custom_docx_download_header');
内容的提问来源于stack exchange,提问作者xPalis
相关产品推荐
相关产品推荐

