Today i’ve spent a lot of time (probably too much) to understand how to modify extensions, inside an url, with the rewrite of Nginx.
Mi goal was call the url http://mysite.com/miofile.html and serve http://mysite.com/miofile with Nginx, which is actually a php script and not a real html..
To make things more difficult a url with a .html can also specify an existing file and real html file.
Finally i’ve got everything sorted out correctly, so with this post i hope to help someone else in the future to save some time.
While i was searching a solution for my problem i found exactly the opposite, how to add an extension to an url, this was not what i was searching for, but can come handy in otehr situations:
1) Add an extension to an url
Problem: you want to add by default .html to all the urls.
This configuration will rewrite http://xxx.com/myurl to 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) Remove an extension from an url
Problem: I had a wordpress site with permalinks that added to the url .html (don’t ask why), but to work properly, url must be treated like any other php.
This solution will change http://xxx.com/myurl.html to http://xxx.com/myurl and send it to the fastcgi process that will parse and serve it to the final user as a php page.
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; } } |
Probably it’s no the most elegant solution, but it works fine, and with this you can have (if you want so), all your wordpress url ending with .html.
Popular Posts:
- None Found
Nice tip.exactly i was looking for the same.