Сайт на WordPress. Почему не работает .htaccess на сервере, но работает на локалке?
Конвертировал jpg/png в медиатеке в Webp. .htaccess
<IfModule mod_rewrite.c> RewriteEngine On # serves a .webp image instead of jpg/png RewriteCond %{HTTP_ACCEPT} image/webp RewriteCond %{REQUEST_FILENAME} ^(.+).(jpe?g|png)$ RewriteCond %1.webp -f RewriteRule ^(.+).(jpe?g|png)$ $1.webp [T=image/webp,E=accept:1] </IfModule> <IfModule mod_headers.c> Header append Vary Accept env=REDIRECT_accept </IfModule> AddType image/webp .webp |
<IfModule mod_rewrite.c> RewriteEngine On # serves a .webp image instead of jpg/png RewriteCond %{HTTP_ACCEPT} image/webp RewriteCond %{REQUEST_FILENAME} ^(.+).(jpe?g|png)$ RewriteCond %1.webp -f RewriteRule ^(.+).(jpe?g|png)$ $1.webp [T=image/webp,E=accept:1] </IfModule> <IfModule mod_headers.c> Header append Vary Accept env=REDIRECT_accept </IfModule> AddType image/webp .webp
На локалке нормально работает, подменяет jpg на webp, но на сервере не работает. Где копать?
Дополнительно:
На локалке Apache.
На сервере Nginx + Apache и jpg раздаёт сам Nginx без участия Apache.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
На локалке у Вас, скорее всего, Apache сам обрабатывает статику и читает
.htaccess. На сервере связка Nginx + Apache часто устроена иначе: Nginx отдаёт jpg/png напрямую как статические файлы и вообще не передаёт их в Apache. В таком случае правила.htaccessдля подмены webp просто не выполняются.Проверяется просто: откройте Network и посмотрите response headers для jpg. Если там видно nginx и файл отдаётся напрямую, Apache rewrite не участвует.
Решение нужно делать в конфиге Nginx. Пример логики:
location ~* ^(.+).(png|jpe?g)$ { add_header Vary Accept; try_files $uri$webp_suffix $uri =404; } map $http_accept $webp_suffix { default ""; "~*webp" ".webp"; }
Точный синтаксис зависит от конфигурации хостинга. На виртуальном хостинге Вы часто не можете сами править nginx, поэтому нужно писать хостеру: “нужно включить обработку WebP replacement на уровне nginx или передавать изображения в Apache”.
Но перед этим проверьте, что рядом с файлом реально есть webp:
image.jpg image.jpg.webp или image.webp
Ваше правило ожидает конкретную схему имени файла. Если конвертер создаёт
image.webp, а правило ищетimage.jpg.webp, подмена тоже не сработает.Итог:
.htaccessне работает, потому что серверную статику отдаёт Nginx. Либо переносите правила в nginx, либо используйте плагин/хостинг, который умеет WebP rewrite на вашей связке.