Cherokee Web Server: Redirections

Redirections

The main idea of a redirection is telling to the web client to go to another URL when the request URL matchs some rule.


For example, if you have URLs like


You probably would prefer URLs like:


Parameters

The redir handler accepts three directives:

This directive uses PCRE (http://www.pcre.org) (Perl Compatible Regular Expressions) to make the substitution. The redirection will happen internally, hence the the internal URL in which the address is translated will be invisible for the client.

It works in the same way as the previous one, but in this case, it will redirect the connection to the new resource.

This specify the default rule which will be used if none of the previous Rewrite rules maches. It appends the requested URL to the end of url.

Virtual hosts and redirections

The internals redirections, using the Rewrite key word, are limited to work in the same virtual host. All the internal redirections will be processed in the original virtual host, which makes quite sense in terms of security.

In the case you do need the redirect some resource to another virtual host and/or domain, you will have to use an explicit redirection using the Show Rewrite key words.


Examples

This example will perform a hidden redirection:

Directory /photo {
    Handler redir {
        Rewrite "/(\d+)$" "http://example.com/inst/photogallery/viewphoto?photoid=$1"
        Rewrite "/(\d+)/cmts" "http://example.com/viewcomments?photoid=$1"
        Rewrite "/(\d+)/delete" "http://example.com/inst/photogallery/admin?photoid=$1&method=delete"
        URL http://example.com/notfound?url=
    }
}

Some examples of translations:

RequestInternal translation
/123http://example.com/inst/photogallery/viewphoto?photoid=123
/501/deletehttp://example.com/inst/photogallery/admin?photoid=501&method=delete
/somethinghttp://example.com/notfound?url=something


In the case you want to use an HTTP redirection, this is the right configuration entry:

Directory /photo {
    Handler redir {
        Show Rewrite "/(\d+)$" "http://example.com/inst/photogallery/viewphoto?photoid=$1"
        Show Rewrite "/(\d+)/cmts" "http://example.com/viewcomments?photoid=$"
        Show Rewrite "/(\d+)/delete" "http://example.com/inst/photogallery/admin?photoid=$1&method=delete"
        URL http://example.com/notfound?url=
    }
}