§ 13. Il reindirizzamento per i file spostati

Ho pensato di affrontare in un paragrafo separato una questione particolare riguardante il reindirizzamento (redirect 301). Ed è il caso di scrivere «tratto da una storia vera»: ho passato due o tre ore a risolvere il problema in questione verificatosi sul mio sito.
Immaginiamo di avere pubblicato sul nostro sito una serie di documenti da mostrare (e evidentemente far scaricare) ai visitatori. Tali documenti sono raccolti in una directory del nostro server ma, durante i lavori di aggiornamento del nostro sito, abbiamo deciso di spostarli da un’altra parte (oppure semplicemente rinominare la directory). I nostri visitatori fedeli, però, sono abituati ad aprire i loro documenti preferiti con i loro indirizzi (URL) vecchi. Probabilmente hanno pure pubblicato dei link diretti su internet… Come possiamo proteggerli dall’errore 404?
Il problema si risolve con il file di configurazione del server (.htaccess o web.config).

1. La soluzione con il web.config
Nel caso di un server IIS (hosting Windows) dobbiamo risolvere il problema lavorando sul file web.config.
Ipotizziamo un problema con un indirizzo URL da riscrivere in modo complesso. Ipotizziamo dunque di avere un archivio pubblico dei libri in PDF raggruppati in sottocartelle chiamate con i cognomi degli autori. Di conseguenza, l’indirizzo di ogni file è http://sito.it/download/booksinpdf/nomeautore/nomelibro.pdf
La nostra biblioteca digitale è grande, quindi le componenti che ho messo in corsivo sono ovviamente varie e numerose. Noi abbiamo trasferito tutti i pdf e vogliamo essere certi che i visitatori li aprano sempre senza problemi agli indirizzi nuovi: http://sito.it/files/booksinpdf/nomeautore/nomelibro.pdf
Nell’indirizzo nuovo ho messo in corsivo anche la parte modificata.
La soluzione è la seguente:

<rule name="redirect PDFs" stopProcessing="true">
<match url="download/booksinpdf/([0-9A-Za-z ]+)/([0-9A-Za-z ]+).pdf$" />
<action type="Rewrite" url="files/booksinpdf/{R:1}/{R:2}.pdf" />
</rule>

Le componenti variabili sono racchiuse tra le parentesi tonde e vengono riprese nella fase di reindirizzamento nelle parentesi graffe. La loro quantità e posizione, naturalmente, variano in base alle necessità concrete.
Un’altra osservazione è banalissima: tale metodo funziona per tutte le estensioni dei file: .mp3, .jpg, .doc etc.

2. La soluzione con il .htaccess
Nel caso di un server Apache (hosting Linux) siamo costretti a lavorare con il file .htaccess.
La logica del reindirizzamento dovrebbe essere come descritta di seguito, anche se non ho avuto il modo di sperimentarla sulla pratica (sto sul server IIS, quindi ho risolto il caso come descritto sopra).
Ipotizziamo un problema con un indirizzo URL da riscrivere in modo complesso. Ipotizziamo dunque di avere un archivio pubblico dei libri in PDF raggruppati in sottocartelle chiamate con i cognomi degli autori. Di conseguenza, l’indirizzo di ogni file è http://sito.it/download/booksinpdf/nomeautore/nomelibro.pdf
La nostra biblioteca digitale è grande, quindi le componenti che ho messo in corsivo sono ovviamente varie e numerose. Noi abbiamo trasferito tutti i pdf e vogliamo essere certi che i visitatori li aprano sempre senza problemi agli indirizzi nuovi: http://sito.it/files/booksinpdf/nomeautore/nomelibro.pdf
Nell’indirizzo nuovo ho messo in corsivo anche la parte modificata.
La soluzione è la seguente:

RewriteEngine on
RewriteRule ^download/booksinpdf/(.+)/(.+\.pdf)$ files/booksinpdf/$1 [L]

Tale metodo deve funzionare per tutte le estensioni dei file: .mp3, .jpg, .doc etc.