Oct 142011
 

nginxOggi ho speso un sacco di tempo (forse troppo) per capire come modificare le estensioni, all’interno di una url, con le rewrite di Nginx .

Ovvero chiamare la url http://miosito.com/miofile.html e servire con Nginx http://miosito.com/miofile, che in realtà è un php da processare.
A fare le cose più difficile una url .html può indicare anche un file esistente html.

Finalmente ho risolto tutto correttamente, quindi con questo post spero di aiutare qualcun’altro a fare il tutto molto più velocemente in futuro.




Mentre stavo cercando una soluzione al mio problema ho trovato esattamente l’opposto, come una aggiungere l’estensione ad una url, questo non era quello che stavo cercando, ma può tornare utile in altre situazioni:

1) Add an extension to an url

Problema: si desidera aggiungere di default html a tutti gli URL..

Questa configurazione riscriverà http://xxx.com/myurl in http://xxx.com/myurl.html:

 location / {
         #Si ferma se la url ha già estensione .html
         if ($request_filename ~* ^.+.html$) {
           break;
         }
         # aggiunge .html alla URI e serve il file, directory o link simbolico se esiste
         if (-e $request_filename.html) {
           rewrite ^/(.*)$ /$1.html last;
           break;
         }
       }

2) Rimuovere un’estensione da un url

Problema: Avevo un sito wordpress con permalink che aggiungevano alle url .html (non chiedetemi il perchè), ma per funzionare correttamente le url devono essere trattate come qualsiasi altro php.

Questa soluzione cambierà http://xxx.com/myurl.html in http://xxx.com/myurl e la invierà al processo FastCGI che la analizzerà e servirà all’utente finale come php.

location ~ \.html$ {
                #Si ferma se la url corrisponde ad un vero file .html
                if (-f $request_filename) {
                expires 30d;
                break;
                }
                # se il file non esiste rimuove l'estensione. html e continua
                if (!-e $request_filename) {
                rewrite ^/(.*)\.html$ /$1 last;
                }
    }
 
 # configurazione standard per l'elaborazione di un url in Wodpress
 location / {
        index  index.html index.htm index.php;
        try_files $uri $uri/ /index.php;
 
        if (-f $request_filename) {
                expires 30d;
                break;
        }
        if (!-e $request_filename) {
                rewrite ^(.+)$ /index.php last;
         }
    }
 
location ~ \.php$ {
                include /etc/nginx/fastcgi_params;
                fastcgi_pass  127.0.0.1:9000;
                fastcgi_index index.php;
                fastcgi_param  SCRIPT_FILENAME  /srv/www/mysite.com/public_html$fastcgi_script_name;
    }
}

Probabilmente non è la soluzione più elegante, ma funziona benissimo, e con questo si può avere (se si vuole), tutte le url di wordpress che terminano con .html.


Popular Posts:

flattr this!

  One Response to “Come modificare una estensione in una url con i rewrite di Nginx”

  1. Nice tip.exactly i was looking for the same.

 Leave a Reply

(required)

(required)


*

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=""> <strike> <strong>