Utilizzando Zend Framework 2 ho riscontrato un fastidioso problema legato alla presenza della barra alla fine di un indirizzo (la cosiddetta trailing slash): il  meccanismo di routing implementato nel framework non lo gradisce quindi non lo risolve correttamente e genera un errore di pagin non trovata.

Per quanto il problema sia ovviabile dal lato client semplicemente cancellando la barra finale, la cosa risulta comunque tediante e sono quindi andato alla ricerca di una soluzione più efficace.; la soluzione è molto semplice ed implica l'inserimento di un paio di righe nelle impostazioni personalizzate contenute nel file .htaccess del sito in questione.

 

Per chi non lo sapesse, il file .htaccess (sui sistemi Unix-Like, altrimenti htaccess.txt sui sistemi Windows), è un file di testo contenente delle direttive per il webserver atte a modificare il comportamento predefinito (permessi, quote, gestione URL ecc.) ed in questo caso prenderemo in considerazione un paio di direttive relative alla tecnica di URL Rewrite, atte a risolvere il problema appena descritto.

Inseriemo quindi nel file le righe:

# remove trailing slashes
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]

 Il significato delle due direttive è:

  • RewriteCond %{REQUEST_FILENAME} !-d
    per indicare al webserver di applicare la regola successiva a condizione che l'URL non corrisponda ad una reale directory presente nel nostro sito
  • RewriteRule ^(.*)/$ /$1 [L,R=301]
    per eliminare dall'URL la barra finale (individuata con /$ nel pattern)