| <!--toc-->  | 
	
	
		|  | 
	
	
		|  | 
	
	
		| ## Introduction | 
	
	
		|  | 
	
	
		| In most of the examples in this wiki the applications | 
	
	
		| run from some basic URL - defined by the script name, | 
	
	
		| for example "Hello World" application runs | 
	
	
		| at "/hello" URL message board application runs  | 
	
	
		| from "/mb" URL. | 
	
	
		|  | 
	
	
		| It is simple and useful as all static files served | 
	
	
		| as is and the application's URL use its own paths: | 
	
	
		|  | 
	
	
		| For example: | 
	
	
		|  | 
	
	
		| Static files: | 
	
	
		|  | 
	
	
		|     /media/style.css | 
	
	
		|      | 
	
	
		| Application: | 
	
	
		|   | 
	
	
		|     /mb | 
	
	
		|     /mb/tree/1 | 
	
	
		|     /mb/comment/10  | 
	
	
		|  | 
	
	
		| Where "/tree/1" and "/comment/10" are application's | 
	
	
		| sub path. | 
	
	
		|  | 
	
	
		| However we frequently may want to run the application  | 
	
	
		| in the "root" of the web service such that the main | 
	
	
		| URL would be "/" | 
	
	
		|  | 
	
	
		| The naive approach - redirecting all requests to the | 
	
	
		| application would not work as static files should | 
	
	
		| be served from other location starting from "/" and | 
	
	
		| it is not application's job to serve static files. | 
	
	
		|  | 
	
	
		| So to do this you need to use URL Rewriting rules | 
	
	
		| that exist in any modern web server. | 
	
	
		|  | 
	
	
		| So if the application should start at the root "/" | 
	
	
		| and all the media files should be served from "/media/" | 
	
	
		| directory we would want to live "/media/*" URL untouched | 
	
	
		| and rewrite all other URLs like "/tree/1" to "/mb.fcgi/tree/1" where "/mb.fcgi" is out script. | 
	
	
		|  | 
	
	
		| So we would show how to create correct rewrite rules | 
	
	
		| for the web server to serve the application in the | 
	
	
		| host root. | 
	
	
		|  | 
	
	
		| We would assume that: | 
	
	
		|  | 
	
	
		| - All static files are placed in `/media/` directory | 
	
	
		| relatively the the web root of the application. | 
	
	
		| - Our FastCGI handler is mapped to "script" `/mb.fcgi`. | 
	
	
		|  | 
	
	
		| See [How to configure the web server to run CppCMS applications](/wikipp/en/page/cppcms_1x_tut_web_server_config) tutorial. | 
	
	
		|  | 
	
	
		| ## Rewrite rules for different web servers | 
	
	
		| ### Apache2  | 
	
	
		|  | 
	
	
		| We should enable `mod_rewrite` and put in | 
	
	
		| our `<VirtualHost *>` location following rewrite rules | 
	
	
		|  | 
	
	
		|  | 
	
	
		|     RewriteEngine On | 
	
	
		|     RewriteRule ^(/media/.*)$ $1 [PT] | 
	
	
		|     RewriteRule ^/(.*)$ /mb.fcgi/$1 [QSA,L] | 
	
	
		|  | 
	
	
		| All the "/media/" files would be served as-is as files `[PT]` flag and the rest of the URL's like `/some/url` would be mapped into /mb.fcgi/some/url` | 
	
	
		|  | 
	
	
		| ### lighttpd  | 
	
	
		|  | 
	
	
		| We should enable `mod_rewrite` and provide following rule: | 
	
	
		|  | 
	
	
		|     url.rewrite-once = ( | 
	
	
		|       "^(/media/.*)"  => "$1", | 
	
	
		|       "^/(.*)" => "/mb.fcgi/$1" | 
	
	
		|     ) | 
	
	
		|  | 
	
	
		| Please note that we use `rewrite-once` directive such | 
	
	
		| that once `"^(/media/.*)"` rule is executed it would | 
	
	
		| not be rewritten any more. | 
	
	
		|  | 
	
	
		| ### nginx | 
	
	
		|  | 
	
	
		| The rewrite rule that should be defined before | 
	
	
		| the FastCGI handler is following: | 
	
	
		|  | 
	
	
		|  | 
	
	
		|     rewrite  ^(/media/.*)$  $1  last; | 
	
	
		|     rewrite  ^/(.*)$  /mb.fcgi/$1 ; | 
	
	
		|  | 
	
	
		| Note: the `last` parameter is used for `/media/.*` root | 
	
	
		| to prevent following substitution. This is not done | 
	
	
		| fo the root URL `^/(.*)$` as FastCGI uses rewriting | 
	
	
		| on its own. | 
	
	
		|  | 
	
	
		| ## Useful Sources | 
	
	
		|  | 
	
	
		| - [Apache mod\_rewrite](http://httpd.apache.org/docs/current/mod/mod_rewrite.html) | 
	
	
		| - [Lighttp mod\_rewrite](http://redmine.lighttpd.net/wiki/1/Docs:ModRewrite) | 
	
	
		| - [Lighttpd mod\_rewrite](http://redmine.lighttpd.net/wiki/1/Docs:ModRewrite) | 
	
	
		| - [Nginx rewrite module](http://wiki.nginx.org/HttpRewriteModule) | 
	
	
		| - [The Django Book - Deploying Django](http://www.djangobook.com/en/1.0/chapter20/) | 
	
	
		|  |