Jun 162011
 

nginxSul mio sito ho avuto un piccolo problema con i feed, li ho gestiti con FeedBurner e sono due uno per ogni lingua, in questo modo vorrei che un utente potesse poter scegliere di avere i feed in inglese o in italiano. Il problema è che mi piacerebbe che quando qualcuno scrive http://linuxaria.com/feed esso arrivi sulla mia pagina di feedburner per la lingua inglese mentre se scrive http://linuxaria.com/feed?lang=it si dovrebbe arrivare sullla pagina dei feed italiana.

Ho provato con il plugin per wordpress di feedburner, ma è buono solo se si ha 1 feed, perché ciecamente reindirizza tutto a 1 indirizzo di FeedBurner, quindi non è una buona soluzione per i miei 2 feed bilingue.

E così l’ho fatto con un Rewrite in Nginx.

In Nginx (versione 1.0.2) non è possibile concatenare le condizioni così ho fatto 2 diverse condizioni

1) Controllare se la query string contiene lang=it

if ($args ~ lang=it) {
        set $test  IT; 
        }

2) Controllare che lo user agent NON sia Feedburner

if ($http_user_agent !~ FeedBurner) {
        set $test  "${test}F";
        }

Questa condizione prende il valore di ${test} ed aggiunge F ad esso se l’User agent NON è Feedburner.

3) Mettiamo insieme le 2 condizioni, ovvero lingua Italiana ed User agent diverso da Feedburner:

if ($test = ITF) {
    rewrite ^/feed/?$ http://feeds.feedburner.com/Linuxaria_It last;
        }

con la direttiva last diciamo a Nginx di smettere di elaborare le regole di rewrite.

4) E alla fine se l’User Agent non è Feedburner e il linguaggio non è l’italiano inviamo l’utente al feed inglese corretto:

if ($test = F) {
    rewrite ^/comment/feed/?$ http://feeds.feedburner.com/CommentsForLinuxaria_En last;
    rewrite ^/feed/?$ http://feeds.feedburner.com/Linuxaria_En last;
    }

Questa condizione prima controlla se il feed è quello per i commenti, altrimenti invia gli utenti al feed inglese per i messaggi.


Conclusioni

Sono un principiante con Nginx, ho più di 10 anni di esperienza con Apache, ma ho iniziato ad utilizzare Nginx solo con la mia VPS, quindi questa potrebbe non essere la soluzione più elegante a disposizione, e se ne avete una migliore per favore lasciatemi un commento.
Per il momento posso dire che funziona benissimo, ho i miei 2 feed serviti da feedburner e ho rimosso il plugin per WordPress.

Popular Posts:

Flattr this!

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)

*