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 / {
         # break if URI has .html extension
         if ($request_filename ~* ^.+.html$) {
           break;
         }
         # add .html to URI and serve file, directory, or symlink if it exists
         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$ {
               # It stops if the url corresponds to a real .html file
                if (-f $request_filename) {
                expires 30d;
                break;
                }
                #if the file doesn't exists removes the .html extension and continues
                if (!-e $request_filename) {
                rewrite ^/(.*)\.html$ /$1 last;
                }
    }
 
 #standard setup to process an 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

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)

*