URL rewrite middleware for express.
Rewrite using a regular expression, rewriting /i123
to /items/123
.
app.use(rewrite(/^\/i(\w+)/, '/items/$1'));
Rewrite using route parameters, references may be named
or numeric. For example rewrite /foo..bar
to /commits/foo/to/bar
:
app.use(rewrite('/:src..:dst', '/commits/$1/to/$2'));
app.use(rewrite('/:src..:dst', '/commits/:src/to/:dst'));
You may also use the wildcard *
to soak up several segments,
for example /js/vendor/jquery.js
would become
/public/assets/js/vendor/jquery.js
:
app.use(rewrite('/js/*', '/public/assets/js/$1'));
In the above examples, the original query string (if any) is left untouched. The regular expression is applied to the full url, so the query string can be modified as well:
app.use(rewrite('/file\\?param=:param', '/file/:param'))
The query string delimiter (?) must be escaped for the regular expression to work.
app.use(rewrite('/path', '/anotherpath?param=some'))
now updates req.query, so req.query.param == 'some'
.
rewrite can be used as a route middleware as in
app.get('/route/:var', rewrite('/rewritten/:var'));
app.get('/rewritten/:var', someMw);
Instead of passing control to next middleware, it passes control to next route.
rewrite can filter result of regex exec before eval destination url.
app.use(rewrite('/foo/*/bar', '/anotherpath?param=$1', m => {
return Foo.findOne({where: {name: m[1]}}).then(foo => {
m[1] = foo.id;
});
}));
Set environment variable DEBUG=express-urlrewrite2