第一次在这里发帖,所以我希望我做得很好。
我从我的 prestashop public_html 文件夹开始将所有 png/jpg 转换为 webp,并向 .htaccess 添加了重写规则,以便提供 webp 而不是 png/jpg。
我的重写基于已经存在的 prestashop 重写。我在哪里:
RewriteRule ^([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$1$2$3.jpg [L]
我最终做了:
RewriteRule ^([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$1$2$3.webp [L]
RewriteRule ^([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.webp$ %{ENV:REWRITEBASE}img/p/$1/$1$2$3.webp [L]
RewriteRule ^([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$1$2$3.jpg [L]
哪个有效:我得到了提供 webp 图像的 jpg URL,到目前为止一切都很好(我知道仍然需要实现
#RewriteCond %{HTTP_ACCEPT} image/webp
#RewriteCond %{DOCUMENT_ROOT}/$1.webp -f
并且尝试弄清楚我是否应该离开[L]
或做[L,T=image/webp]
或做[T=image/webp,E=REQUEST_image]
,这就是为什么我正在阅读与 apache 相关的文档并在网络上爬取关于重写相关主题的内容,这确实是巨大的。
好的,回到主题,我发现我缺少对 prestashop 存储在 public_html/img 文件夹中的图像的 webp 重写。
然后我尝试了以下(以及其他变体):
RewriteRule ^/img/(.+)\.jpe?g$ /img/$1.webp [L]
RewriteRule ^/img/(.+)\.png$ /img/$1.webp [L]
^--- 不好...仍然从 img 目录提供 jpg/png 类型的图像(仔细检查 MIME 类型)。
注意:
- 每次我更改 .htaccess 并尝试解决方案时,我都会清除 prestashop 缓存,以防万一(尽管知道每次请求都会读取 .htaccess)。
- 存在 img 文件夹中 jpg/png 对应的 webp 图片。
- 图像文件 perms 在 img 文件夹中是正确的,实际上在 public_html 下的所有东西中都是正确的
- 在 prestashop 的 img 文件夹中,还有另一个 .htaccess,它限制了可以从此文件夹提供的文件类型,我已经添加了 webp,以防万一有人问。
更新:根据 MrWhite 的要求,添加 img 文件夹的 .htaccess
<IfModule mod_php5.c>
php_flag engine off
</IfModule>
# Apache 2.2
<IfModule !mod_authz_core.c>
Order deny,allow
Deny from all
<Files ~ "(?i)^.*\.(webp|jpg|jpeg|gif|png|bmp|tiff|svg|pdf|mov|mpeg|mp4|avi|mpg|wma|flv|webm|ico)$">
Allow from all
</Files>
</IfModule>
# Apache 2.4
<IfModule mod_authz_core.c>
Require all denied
<Files ~ "(?i)^.*\.(webp|jpg|jpeg|gif|png|bmp|tiff|svg|pdf|mov|mpeg|mp4|avi|mpg|wma|flv|webm|ico)$">
Require all granted
</Files>
</IfModule>
请问你们能帮我吗?