我的客户正在使用带有CPanel v106.0.10的Litespeed。我在.htaccess文件中有一个类似下面的重写规则:
RewriteCond %{HTTP_HOST} ^www.site.com$
RewriteCond %{HTTP_ACCEPT} image/webp
RewriteCond %{DOCUMENT_ROOT}%{ENV:REWRITEBASE}/img/$1.webp -s
RewriteRule ^img/([_a-zA-Z0-9-]+)\.jpg$ %{ENV:REWRITEBASE}img/$1.webp [B,L]
RewriteCond %{HTTP_HOST} ^www.site.com$
RewriteCond %{HTTP_ACCEPT} image/webp
RewriteCond %{DOCUMENT_ROOT}%{ENV:REWRITEBASE}/img/$1.webp !-s
RewriteRule ^img/([_a-zA-Z0-9-]+)\.jpg$ %{ENV:REWRITEBASE}webp.php?src=img/$1.jpg [B,L]
目标是在存在WEBP文件时将图像转换为WEBP格式,如果没有,就调用PHP脚本将JPG文件压缩成WEBP格式。它在Apache上运行良好,但在使用Litespeed服务器时,当WEBP文件不存在时,我会收到403错误。此外,当图像的URL与真实的文件名不匹配时(URL重写)那么它也起作用。所以我认为当URL与真实的文件匹配时,有什么东西阻止了URL重写。谁能帮忙呢?
1条答案
按热度按时间8wtpewkr1#
我发现这是Apache和Litespeed之间的区别。
Litespeed并不像Apache那样优先处理.htaccess文件中定义的规则,因此PHP文件在“/img”目录中是被禁止的,当URL“/img/image.webp”到达时,Apache会将重定向应用到PHP压缩程序,但不会对脚本应用“拒绝访问”,因为它不在“/img”目录中,而Litespeed将重定向应用于PHP压缩器,但阻止对其的访问(403),因为原始URL以“/img”开头。
我猜这是Litespeed的一个错误。