Nginx-inspired (RegExp-based) HTTP Rewrite Middleware for the Connect and Express webservers.
npm install http-rewrite-middleware> This module makes it possible to redirect (rewrite internally or redirect using HTTP codes) User to the specific URL based on RegExp Rules.
> The designated successor of grunt-connect-rewrite.
``shell`
npm install http-rewrite-middleware --save
* Include the module:
`js`
var rewriteModule = require('http-rewrite-middleware');
* Define your rules like:
`js`
var rewriteMiddleware = rewriteModule.getMiddleware([
// Internal rewrite
{from: '^/index_dev.html$', to: '/src/index.html'},
// Internal rewrite
{from: '^/js/(.*)$', to: '/src/js/$1'},
// 301 Redirect
{from: '^/old-stuff/(.*)$', to: '/new-cool-stuff/$1', redirect: 'permanent'},
// 302 Redirect
{from: '^/stuff/(.*)$', to: '/temporary-stuff/$1', redirect: 'temporary'}
]);
* See examples of integration with Connect / Express / Grunt bellow.
##### Rule's format:
{from: '__from__', to: '__to__'[, redirect: 'permanent'|'temporary']}
Where:
* __from__ - RegExp string to match.__to__
* - String that replaces matched URL.redirect
* - Optional parameter:Location
* When it is omitted then the Rule will be dispatched as an internal rewrite (aka proxified).
* If the value is set then Browser will receive HTTP Header with value of parsed __to__ (permanent value will give HTTP 301, any other value will give HTTP 302).
`js
var connect = require('connect'),
http = require('http'),
rewriteModule = require('http-rewrite-middleware');
var app = connect()
.use(rewriteModule.getMiddleware([
// ... list of rules here
])
.use(connect.static('public'));
http.createServer(app).listen(3000);
`
`js
var express = require('express'),
app = express(),
rewriteModule = require('http-rewrite-middleware');
app.use(rewriteModule.getMiddleware([
// ... list of rules here
]);
//...
app.listen(3000);
`
`js
var rewriteModule = require('http-rewrite-middleware');
grunt.initConfig({
connect: {
options: {
port: 9000,
hostname: 'localhost'
},
development: {
options: {
middleware: function (connect, options) {
var middlewares = [];
// RewriteRules support
middlewares.push(rewriteModule.getMiddleware([
// ... list of rules here
]));
if (!Array.isArray(options.base)) {
options.base = [options.base];
}
var directory = options.directory || options.base[options.base.length - 1];
options.base.forEach(function (base) {
// Serve static files.
middlewares.push(connect.static(base));
});
// Make directory browse-able.
middlewares.push(connect.directory(directory));
return middlewares;
}
}
}
}
});
`
In order to debug Rules just add 2nd parameter to the getMiddleware(...) callgetMiddleware(..., {verbose: true})
as this will enable logging of matched rules.__from__
The message will explain which rule was matched and what was the result of the rewrite.
In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code.
Improve logging format
* 2014.02.13 v0.1.5 Fix NPM...
* 2014.01.29 v0.1.3 Add logging support
* 2013.12.17 v0.1.1` Initial Release