4 votes

Rediriger htaccess /dir/*.jpg vers /dir/webp/*.webp uniquement lorsque le fichier webp existe

Je suis en train de tenter de réécrire tous les fichiers du site web (*.jpg|*.gif|*.png) en *.webp dans un sous-répertoire, mais seulement lorsque le fichier *.webp existe. Les anciens et nouveaux fichiers portent le même nom, seule l'extension change et les fichiers *.webp sont tous situés dans un sous-répertoire de l'original.

Je lutte avec le fichier htaccess pour faire le travail. Les règles de base sont les suivantes:

  1. Seulement des correspondances de fichiers PNG/JPG/GIF
  2. Le motif de répertoire d'images d'origine est: /site/views/00_projects/[NOM DU RÉPERTOIRE PRINCIPAL VARIABLE ICI]/content/image/[NOM DU SOUS-RÉPERTOIRE VARIABLE ICI]/*.jpg `* Le motif de répertoire de nouveaux.webpest:/site/views/00_projects/[NOM DU RÉPERTOIRE VARIABLE ICI]/content/image/[NOM DU SOUS-RÉPERTOIRE VARIABLE ICI]/webp/.webp`
    • Réécrire seulement SI le fichier webp existe``

`

Je n'ai vraiment aucune idée de comment faire fonctionner cela. Est-ce que quelqu'un peut m'aider?

`

4voto

MrWhite Points 11269

Strictly speaking you also need to make sure the user-agent making the request supports WEBP images (ie. check the Accept HTTP request header for image/webp).

Try the following near the top of the root .htaccess file:

RewriteEngine On

# Rewrite images to WebP if they exist
RewriteCond %{HTTP_ACCEPT} image/webp
RewriteCond %{DOCUMENT_ROOT}/$1/webp/$2.webp -f
RewriteRule ^(site/views/00_projects/[^/]+/content/image/[^/]+)/([^/]+)\.(?:png|jpg|gif)$ $1/webp/$2.webp [T=image/webp,L]

The RewriteRule pattern (ie. ^(site/views/00_projects/[^/]+/content/image/[^/]+)/([^/]+)\.(?:png|jpg|gif)$) matches the requested png, jpg or gif image and saves the URL-path in the $1 backreference and the filename in the $2 backreference (used later in the RewriteRule substitution string).

The first condition (RewriteCond directive) that checks against the HTTP_ACCEPT server variable, checks that the user-agent supports WEBP images.

The second condition checks that the target webp image exists.

The T=image/webp flag is necessary to send the correct mime-type (Content-Type header) back to the client.

1 votes

Il a fonctionné comme un charme, MERCI BEAUCOUP! Une petite question : avec ce code, l'URL conserve le chemin d'accès initial du fichier (avec *.jpg, par exemple) ; que faudrait-il faire pour rediriger vers le chemin d'accès de l'URL *.webp s'il existe et si le navigateur le prend en charge?

2 votes

@DiegoFlores De rien. Pour une "redirection" permanente, vous ajouteriez un drapeau R=301 à la directive RewriteRule et vous n'auriez alors pas besoin du drapeau T. c.-à-d. [R=301,L]. Cependant, vous devriez généralement éviter une redirection externe si ce sont plusieurs images dans la même page, car cela ralentit potentiellement vos utilisateurs (mauvais pour le SEO) et double les requêtes arrivant sur votre serveur, remplissant vos journaux de masses de 301 pour ce qui sont des demandes "normales". Si vous liez à des fichiers .jpg etc. alors gardez-le en tant que réécriture interne, sinon, modifiez les URL auxquelles vous liez.

0 votes

Merci encore! Je vais le garder à l'esprit! Je me demandais juste si Google lira le bon Content-Type ou seulement l'URL du fichier avec la première solution lors de l'évaluation du référencement SEO/PageSpeed/etc ;-) Quoi qu'il en soit, tu as sauvé la journée <3

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X