Htaccess не перенаправляет в файл, чтобы преобразовать его в webp на лету - PullRequest
0 голосов
/ 28 марта 2020

Я использую laravel и в этом каталоге publi c я использую этот .htaccess для перенаправления каждого файла jpg, jpeg или png в файл php, который может генерировать файл webp. Проблема в том, что все работает на локальном хосте, но на виртуальном хостинге .htaccess не работает.

public / .htaccess

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Redirect images to webp-on-demand.php (if browser supports webp)
    RewriteCond %{HTTP_ACCEPT} image/webp
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^(.*)\.(jpe?g|png)$ webpondemand.php?source=%{SCRIPT_FILENAME} [NC,L]

    # https://help.heroku.com/J2R1S4T8/can-heroku-force-an-application-to-use-ssl-tls
    # https://stackoverflow.com/a/34065445

    # rewrite to HTTPS start
    # If we receive a forwarded http request from a proxy...
    #RewriteCond %{HTTP:X-Forwarded-Proto} =http [OR]

    # ...or just a plain old http request directly from the client
    #RewriteCond %{HTTP:X-Forwarded-Proto} =""
    #RewriteCond %{HTTPS} !=on

    # Redirect to https version
    #RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

    # rewrite to HTTPS end

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>
<FilesMatch "\.(ttf|otf|eot|woff|woff2)$">
  <IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
  </IfModule>
</FilesMatch>

AddType image/webp .webp

#php_flag expose_php Off
#php_value expose_php Off
php_value memory_limit 512M
php_value post_max_size 512M
php_value upload_max_filesize 512M

public / webpondemand. php

<?php
// To start with, lets display any errors.
// - this will reveal if you entered wrong paths
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Once you got it working, make sure that PHP warnings are not send to the output
// - this will corrupt the image
// For example, you can do it by commenting out the lines below:
// error_reporting(0);
// ini_set("display_errors", 0);

require '../vendor/autoload.php';        // Make sure to point this correctly

use WebPConvert\WebPConvert;

$source = $_GET['source'];            // Absolute file path to source file. Comes from the .htaccess
$destination = $source . '.webp';     // Store the converted images besides the original images (other options are available!)

$options = [

    // UNCOMMENT NEXT LINE, WHEN YOU ARE UP AND RUNNING!
    'show-report' => true             // Show a conversion report instead of serving the converted image.

    // More options available!
    // https://github.com/rosell-dk/webp-convert/blob/master/docs/v2.0/converting/introduction-for-converting.md
    // https://github.com/rosell-dk/webp-convert/blob/master/docs/v2.0/serving/introduction-for-serving.md
];
WebPConvert::serveConverted($source, $destination, $options);

Я использую rosell-dk / webp-convert для преобразования изображений в webp на лету. Это необходимо сделать на лету из-за требований клиента.

Пример URL-адреса изображения: https://www.example.com/storage/vacations/March2020/EBK2yfKf6pph0uCK90pO.jpg

Он работает на локальном хосте, но не на виртуальном хостинге. Если я получу прямой доступ к webpondemand. php и передам исходный параметр storage / vacations / March2020 / EBK2yfKf6pph0uCK90pO.jpg , он будет преобразован, но если я получу прямой доступ, то не получится. Очевидно, что это ошибка .htaccess, потому что если он перенаправляет на webpondemand. php, тогда этот файл преобразует его в webp, как это было в localhost. Но он не перенаправляет на webpondemand. php file.

1 Ответ

0 голосов
/ 29 марта 2020

Оказывается, была ли проблема с кэшем изображений поставщиком услуг DNS, также известным как cloudfare. Все, что я сделал, было Go для домена -> вкладка «Кэширование» и очистить все. Теперь каждый новый запрос изображений перенаправляется в мой php файл, который преобразуется в webp и сохраняется в том же каталоге, а также отправляет изображения png и jpeg в формате image / webp без изменения URL-адреса или пути к изображению или добавления расширения .webp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...