Oggi 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:
- None Found
Nice tip.exactly i was looking for the same.