devdev / in the loop

Prestashop: risolvere il problema delle immagini non visualizzate

Uno dei problemi fastidiosi e diffusi che possiamo incontrare quando lavoriamo con Prestashop, è quello delle immagini degli articoli che non vengono visualizzate correttamente. Stiamo parlando di un problema che riguarda soltanto le immagini, perché di fatto tutti gli altri URL (come prodotti o categorie) funzionano correttamente, ma rimane il problema delle immagini che non si vedono.

Questo avviene perché Prestashop non usa l’indirizzo diretto alle immagini, ma ne riscrive gli URL. Per prima cosa accertiamoci che le immagini siano effettivamente presenti sul server nella cartella img  presente nella directory di installazione.

Una delle cause all’origine del problema è che Prestashop ha qualche problemino di funzionamento quando viene ospitato su un server su cui gira nginx. Se usiamo invece Apache, i redirect per creare i Friendly URL funzioneranno correttamente senza configurazioni aggiuntive.

La soluzione sta nel dire direttamente a nginx come deve eseguire l’url rewrite per quanto riguarda le immagini, incollando queste direttive nel suo file di configurazione nginx.conf:

location /CARTELLA_INSTALLAZIONE/ {
index /CARTELLA_INSTALLAZIONE/index.php;

rewrite ^/CARTELLA_INSTALLAZIONE/api/?(.*)$ /CARTELLA_INSTALLAZIONE/webservice/dispatcher.php?url=$1 last;
rewrite ^/CARTELLA_INSTALLAZIONE/([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /CARTELLA_INSTALLAZIONE/img/p/$1/$1$2.jpg last;
rewrite ^/CARTELLA_INSTALLAZIONE/([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /CARTELLA_INSTALLAZIONE/img/p/$1/$2/$1$2$3.jpg last;
rewrite ^/CARTELLA_INSTALLAZIONE/([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /CARTELLA_INSTALLAZIONE/img/p/$1/$2/$3/$1$2$3$4.jpg last;
rewrite ^/CARTELLA_INSTALLAZIONE/([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /CARTELLA_INSTALLAZIONE/img/p/$1/$2/$3/$4/$1$2$3$4$5.jpg last;
rewrite ^/CARTELLA_INSTALLAZIONE/([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /CARTELLA_INSTALLAZIONE/img/p/$1/$2/$3/$4/$5/$1$2$3$4$5$6.jpg last;
rewrite ^/CARTELLA_INSTALLAZIONE/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /CARTELLA_INSTALLAZIONE/img/p/$1/$2/$3/$4/$5/$6/$1$2$3$4$5$6$7.jpg last;
rewrite ^/CARTELLA_INSTALLAZIONE/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /CARTELLA_INSTALLAZIONE/img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$7$8.jpg last;
rewrite ^/CARTELLA_INSTALLAZIONE/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /CARTELLA_INSTALLAZIONE/img/p/$1/$2/$3/$4/$5/$6/$7/$8/$1$2$3$4$5$6$7$8$9.jpg last;
rewrite ^/CARTELLA_INSTALLAZIONE/c/([0-9]+)(-[_a-zA-Z0-9-]*)(-[0-9]+)?/.+\.jpg$ /CARTELLA_INSTALLAZIONE/img/c/$1$2.jpg last;
rewrite ^/CARTELLA_INSTALLAZIONE/c/([a-zA-Z-]+)(-[0-9]+)?/.+\.jpg$ /CARTELLA_INSTALLAZIONE/img/c/$1.jpg last;
rewrite ^/CARTELLA_INSTALLAZIONE/([0-9]+)(-[_a-zA-Z0-9-]*)(-[0-9]+)?/.+\.jpg$ /CARTELLA_INSTALLAZIONE/img/c/$1$2.jpg last;
try_files $uri $uri/ /CARTELLA_INSTALLAZIONE/index.php?$args;
}

Sostituite /CARTELLA_INSTALLAZIONE/ con il nome della vostra cartella. Se Prestashop fosse installato nella cartella principale (root) del vostro dominio, basterà sostituire /CARTELLA_INSTALLAZIONE/ con /:

location / {
index /index.php;

rewrite ^/api/?(.*)$ /webservice/dispatcher.php?url=$1 last;
rewrite ^/([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$1$2.jpg last;
rewrite ^/([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$1$2$3.jpg last;
rewrite ^/([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$1$2$3$4.jpg last;
rewrite ^/([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$1$2$3$4$5.jpg last;
rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$1$2$3$4$5$6.jpg last;
rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$1$2$3$4$5$6$7.jpg last;
rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$7$8.jpg last;
rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$8/$1$2$3$4$5$6$7$8$9.jpg last;
rewrite ^/c/([0-9]+)(-[_a-zA-Z0-9-]*)(-[0-9]+)?/.+\.jpg$ /img/c/$1$2.jpg last;
rewrite ^/c/([a-zA-Z-]+)(-[0-9]+)?/.+\.jpg$ /img/c/$1.jpg last;
rewrite ^/([0-9]+)(-[_a-zA-Z0-9-]*)(-[0-9]+)?/.+\.jpg$ /img/c/$1$2.jpg last;
try_files $uri $uri/ /index.php?$args;
}

Se non avete accesso al file di configurazione o non sapete come fare, contattate la vostra hosting company: saprà sicuramente aiutarvi al meglio.

Questo articolo ti è stato utile?
Server – LETTURA 7 MINUTI Il comando du, esempi e flag
Il comando du è uno standard Linux/Unix (e Mac) che ci permette di ottenere informazioni su file e cartelle in…
Server – LETTURA 5 MINUTI rsync: come escludere file e cartelle
Rsync (Remote sync) è uno strumento molto potente per poter sincronizzare due cartelle, e per poter effettuare backup incrementali. In…
Server – LETTURA 4 MINUTI Come bloccare un IP con .htaccess
Bloccare l’accesso ad un sito può essere utile per vari motivi: bloccare script malevoli, proteggersi dagli stalker o da quegli…
Server – LETTURA 12 MINUTI Che cos’è la High Availability
In questi anni stiamo vedendo un incremento verticale delle strutture ad alta efficacia, sia in termini di performance che di…
Roba figa da
if (weekend) {
    relax();
}
la nostra newsletter, ogni tanto.