Сайт на WordPress. Почему не работает .htaccess на сервере, но работает на локалке?

Ссылка скопирована
1 ответ

Конвертировал 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. На том же бегете это прокатывает
  • KingAnton, а что конкретно нужно включить?
  • Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Павел Админов Ответ

    На локалке у Вас, скорее всего, 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";
    }

    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.jpg image.jpg.webp или image.webp

    Ваше правило ожидает конкретную схему имени файла. Если конвертер создаёт image.webp, а правило ищет image.jpg.webp, подмена тоже не сработает.

    Итог: .htaccess не работает, потому что серверную статику отдаёт Nginx. Либо переносите правила в nginx, либо используйте плагин/хостинг, который умеет WebP rewrite на вашей связке.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно