Dove vengono salvati i file XML/PDF generati e come proteggerli

Configurazionewordpress2026-07-01

Obiettivo

Sapere dove finiscono fisicamente sul server i documenti generati da POP e come impedire che siano scaricabili pubblicamente da chi conosce (o indovina) l’URL.

Percorsi di salvataggio

I documenti generati tramite le API cloud POP (XML, PDF, e i formati aggiuntivi UBL, KSeF, ZUGFeRD a seconda del canale attivo) vengono messi in cache localmente per velocizzare i download e ridurre il consumo di crediti API, sotto wp-content/uploads/, suddivisi per anno e mese:

wp-content/uploads/pop-xml/YYYY/MM/
wp-content/uploads/pop-pdf/YYYY/MM/
wp-content/uploads/pop-ubl/YYYY/MM/
wp-content/uploads/pop-ksef/YYYY/MM/
wp-content/uploads/pop-zugferd/YYYY/MM/

Esiste inoltre un’opzione separata, facoltativa, per salvare una copia dell’XML generato in una cartella dedicata (utile per backup/integrazioni esterne): di default wp-content/uploads/pop-invoice, configurabile in Advanced.

Protezione automatica (Apache)

Ogni cartella pop-* viene protetta automaticamente da POP creando un file .htaccess al suo interno:

<IfModule mod_authz_core.c>
    Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
    Deny from all
</IfModule>

Questo blocca l’accesso diretto via browser su server Apache. Il file viene generato automaticamente alla prima scrittura in ciascuna cartella: non serve crearlo a mano.

Protezione su NGINX (richiede intervento manuale)

Su server NGINX (es. Kinsta, WPEngine, VPS con NGINX) le direttive .htaccess non vengono lette: serve una regola equivalente nella configurazione del sito, ad esempio:

location ~ ^/wp-content/uploads/pop-(pdf|xml|ubl|ksef|zugferd|invoice)/.*$ {
  return 403;
}

Dopo averla aggiunta, riavvia NGINX per applicarla.

Verifica

Prova ad aprire direttamente nel browser l’URL di un file generato (es. https://tuosito.it/wp-content/uploads/pop-pdf/2026/07/documento.pdf): deve restituire un errore 403 (accesso negato), non il file.

Errori comuni

Configurazione correlata

Per il formato e i limiti dell’XML generato vedi xml-invoices-generated.