Rewrite rule massive httpd

Ciao,
vorrei chiedere se qualcuno di voi ha lavorato su Apache httpd, con un gruppo di rewrite rule massivo e per ridurre la complessità della configuazione ha mai usato la direttive RewriteMap.

Sapete sa sia possibile utilizzare questa direttiva per snellire la configurazione?

Grazie mile,
Marcello

Non ho mai usato RewriteMap ma in genere in apache e con le nuove applicazioni web si dovrebbero riuscire a creare url semplici senza difficoltà e senza necessità di creare molte righe di istruzioni nei file htaccess…anzi in genere ne bastano poche…

Purtroppo la vastità delle URL è veramente ampia e può cambiare nel tempo. L’idea era quella di poter gestire in poche righe una base di rewrite molto più ampia ed estendibile nel tempo, senza dover toccare i file di configurazione.

Vengono riportati esempi con questa direttiva nel mod_rewrite, ma la documentazione non è poi cosi chiara.

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.