Sono riuscito nella configurazione ed ecco qui due righe su come implementare ove necessario l’url mapping
In alcuni casi è necassario configurare una serie molto ampia di rewrite rule che dovranno redirigere le richieste da una URI ad un’altra (la più aggiornata), come ad esempio nel caso di restyle dei siti, dove il mapping delle url viene cambiato in base all’albero di navigazione del sito. Risulta molto sconveniente come implementazione, la stesura di una serie infinita di rewrite rule, all’interno del file di configurazione di apache, che posso ad esempio dare spazio ad errori e difficoltà nel debug.
Nel nostro esempio sono state implementate una serie di regole per la navigazione , ma la gestione così svolta è veramente pesante per le performance e la leggibilità della configurazione.
RewriteEngine On
RewriteRule ^/tes1.html /newtest1.html [R,L]
RewriteRule ^/tes2.html /newtest2.html [R,L]
RewriteRule ^/tes3.html /newtest3.html [R,L]
RewriteRule ^/tes4.html /newtest4.html [R,L]
RewriteRule ^/tes5.html /newtest5.html [R,L]
.....
E’ possibile ridurre la configurazione delle rewrite tramite la direttive RewrteMap. Infatti questa direttiva permette di creare un file esterno dove poter salvare il mapping tra vecchia e nuova chiave che verrà sostituita all’interno del rewrite rule. Si dovrà creare per prima cosa un file txt contenente le chiavi con vecchia e nuova url.
[root@cellopc ~]# vim /etc/httpd/conf.d/rewrites.txt
/test1.html /newtest1.html
/test2.html /newtest2.html
/test3.html /newtest3.html
/test4.html /newtest4.html
/test5.html /newtest5.html
Successivamente si dovrà partire con la configurazione abilitando il mod_rewrite tramite la direttive RewriteEngine. Nella riga succcessiva si dovrà specificare la direttive RewriteMap specificando un nome identificato della rewritemap, il tipo di rewritemap (nel nostro caso txt) e poi il path dove rintracciare il file.
RewriteEngine On
RewriteMap mobile txt:/etc/httpd/conf.d/rewrites.txt
Si dovrà poi configurare una condizione dove si verifica che venga rintracciata la entry all’interno del file per evitare un loop infinito di rewrite rule.
RewriteCond ${mobile:$1} >""
Nell’ultima regola viene eseguita una rewrite rule dove se viene trovata una match tra le chiavi presenti all’interno del file verrà applicata la regola, altrimenti la URI non verrà modificata (si specifica nel valore riportato dopo il pipe presente tra parentesi graffe):
RewriteRule ^(.*)$ ${lmobile:$1|$1} [R,L]
La configurazione finale è la seguente:
RewriteEngine On
RewriteCond ${mobile:$1} >""
RewriteRule ^(.*)$ ${mobile:$1|$1} [R,L]
In presenza di Query String all’interno della URL, verranno riportate tale e quali senza dover specificare il parametro QSA, rendendo la rewrite il più generica possibile.