You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Drupal9 OpenLiteSpeed下图片样式未生成到public目录问题

故障原因

该问题是OpenLiteSpeed与Apache重写规则逻辑差异导致的:

  • OpenLiteSpeed执行重写规则时,对REQUEST_FILENAME的文件存在性判断逻辑和Apache、Nginx不一致,会将URL携带的查询参数计入文件路径校验
  • Drupal响应式图片样式请求默认携带itok安全校验参数,当对应样式图片还未生成时,OpenLiteSpeed无法正确匹配到「文件不存在则转发给index.php处理」的规则,直接返回404错误
  • 手动在路径中加入index.php时,请求直接进入PHP路由,Drupal正常触发图片生成逻辑,文件落地到styles目录后,后续请求因为文件真实存在,就可以直接正常加载。

你当前.htaccess中针对files/styles路径的专用转发规则处于注释状态,没有生效,也是问题出现的诱因之一。

修复方案

方案1:修改.htaccess增加图片样式路径专用转发(推荐)

打开Drupal根目录下的.htaccess文件,找到被注释的styles路径重写规则,替换为如下内容,放在通用重写规则之前:

# 强制转发图片样式请求到index.php,兼容OpenLiteSpeed重写逻辑
RewriteCond %{REQUEST_URI} ^/sites/default/files/styles/
RewriteRule ^ index.php [L,QSA]

规则说明:

  • 所有匹配图片样式路径的请求,直接内部转发给index.php处理,不做文件存在性校验
  • QSA标记会保留原有itok参数,不影响Drupal的安全校验逻辑
  • 不要添加R=301/R=302跳转标记,避免产生不必要的外部重定向

修改完成后重启OpenLiteSpeed,清空Drupal全站缓存即可测试。

方案2:调整OpenLiteSpeed虚拟主机重写配置

如果不想修改站点.htaccess文件,可以调整服务器配置对齐Apache行为:

  1. 登录OpenLiteSpeed管理后台,进入对应站点的虚拟主机配置页
  2. 找到「Rewrite」配置项,将Check File Existence选项设置为No
  3. 保存配置后执行平滑重启,清空Drupal缓存测试

该配置会关闭OpenLiteSpeed提前校验文件是否存在的逻辑,完全按照.htaccess定义的规则执行重写,和Apache运行行为保持一致。

方案3:临时兜底方案

如果暂时无法调整配置,可以通过Drupal后台性能页面或drush命令批量预生成所有图片样式文件,临时解决访问问题,但后续新上传的图片仍会出现相同故障,不建议作为长期方案使用。

验证方法

修复完成后可以先删除sites/default/files/styles目录下的测试文件,直接访问不带index.php的图片样式地址,如果可以正常加载图片,且对应目录自动生成了目标图片文件,说明修复生效。


内容的提问来源于stack exchange,提问作者danplaton4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 01:01:26