apache rewrite

Rewrite per no haver de baixar-se les imatges del servidor mentre desenvolupem

Si hi ha una cosa que m'emprenya quan els clients et donen accés als seus projectes web per desenvolupar millores, arreglar bugs, etc, és haver-se de baixar desenes o fins i tot centenars de gigabytes de fitxers, el 90% imatges, vídeos o altres recursos, que només ocupen espai i no tenen cap utilitat per fer la feina.

O també en projectes on sovint vas replicant l'entorn de producció a preproducció i després de mitja hora esperant copiant fitxers peta tot perquè ja no hi cap ni un byte més al disc dur... Fitxers duplicats que no serveixen per res.

Sovint amb una còpia de la base de dades i accés al repositori de codi acostuma a ser més que suficient, però sempre està bé veure el resultat final amb les imatges, sobretot als entorns de pre per exemple...

Doncs bé, d'un temps ençà que vaig decidir posar-hi remei i se'm va acudir de configurar un Rewrite a la configuració del virtualhost del servidor web local (o de pre) per tal que si s'intenta accedir a un fitxer físic que no existeix faci un rewrite per agafar-lo del web de producció. L'únic que ens interessa són els fitxers sota el path dels uploads, en el cas de Drupal seria sites/default/files i del wordpress wp-content/uploads, etc. I quedaria algo com:

<VirtualHost *:80>
        ServerName coders.dev
        DocumentRoot /var/www/coders/web

        <IfModule mod_rewrite.c>
                RewriteEngine on
                RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
                RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
                RewriteCond %{REQUEST_URI} !\.(css|js)$
                RewriteRule sites/default/files/(.*) https://coders.cat/sites/default/files/$1 [NC,L]
        </IfModule>

        <Directory  /var/www/coders/web>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Require all granted
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/coders.error.log
        CustomLog ${APACHE_LOG_DIR}/coders.access.log combined
</VirtualHost>

Si us fixeu hem exclòs els css i js del rewrite per temes de com funciona la cache del drupal, també podríem afegir-hi només certes extensions, etc.

Això em va ser especialment útil durant un any que vaig estar vivint a una zona on no tenia connexió a Internet i anava amb un router 4G amb la corresponent limitació de tràfic.