forked from svrjs/svrjs
Add support for web root postfixes (for every host)
This commit is contained in:
parent
6a9afcbc26
commit
6abe280ee8
1 changed files with 69 additions and 2 deletions
71
svr.js
71
svr.js
|
@ -1086,6 +1086,7 @@ var useWebRootServerSideScript = true;
|
||||||
var exposeModsInErrorPages = true;
|
var exposeModsInErrorPages = true;
|
||||||
var disableTrailingSlashRedirects = false;
|
var disableTrailingSlashRedirects = false;
|
||||||
var environmentVariables = {};
|
var environmentVariables = {};
|
||||||
|
var wwwrootPostfixesVHost = [];
|
||||||
|
|
||||||
// Get properties from config.json
|
// Get properties from config.json
|
||||||
if (configJSON.blacklist != undefined) rawBlackList = configJSON.blacklist;
|
if (configJSON.blacklist != undefined) rawBlackList = configJSON.blacklist;
|
||||||
|
@ -1139,7 +1140,7 @@ if (configJSON.useWebRootServerSideScript != undefined) useWebRootServerSideScri
|
||||||
if (configJSON.exposeModsInErrorPages != undefined) exposeModsInErrorPages = configJSON.exposeModsInErrorPages;
|
if (configJSON.exposeModsInErrorPages != undefined) exposeModsInErrorPages = configJSON.exposeModsInErrorPages;
|
||||||
if (configJSON.disableTrailingSlashRedirects != undefined) disableTrailingSlashRedirects = configJSON.disableTrailingSlashRedirects;
|
if (configJSON.disableTrailingSlashRedirects != undefined) disableTrailingSlashRedirects = configJSON.disableTrailingSlashRedirects;
|
||||||
if (configJSON.environmentVariables != undefined) environmentVariables = configJSON.environmentVariables;
|
if (configJSON.environmentVariables != undefined) environmentVariables = configJSON.environmentVariables;
|
||||||
|
if (configJSON.wwwrootPostfixesVHost != undefined) wwwrootPostfixesVHost = configJSON.wwwrootPostfixesVHost;
|
||||||
var wwwrootError = null;
|
var wwwrootError = null;
|
||||||
try {
|
try {
|
||||||
if (cluster.isPrimary || cluster.isPrimary === undefined) process.chdir(configJSON.wwwroot != undefined ? configJSON.wwwroot : __dirname);
|
if (cluster.isPrimary || cluster.isPrimary === undefined) process.chdir(configJSON.wwwroot != undefined ? configJSON.wwwroot : __dirname);
|
||||||
|
@ -4205,7 +4206,7 @@ if (!cluster.isPrimary) {
|
||||||
doCallback = false;
|
doCallback = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (matchHostname(mapEntry.host) && createRegex(mapEntry.definingRegex).test(address) && !(mapEntry.isNotDirectory && _fileState == 2) && !(mapEntry.isNotFile && _fileState == 1)) {
|
if (matchHostname(mapEntry.host) && address.match(createRegex(mapEntry.definingRegex)) && !(mapEntry.isNotDirectory && _fileState == 2) && !(mapEntry.isNotFile && _fileState == 1)) {
|
||||||
try {
|
try {
|
||||||
mapEntry.replacements.forEach(function (replacement) {
|
mapEntry.replacements.forEach(function (replacement) {
|
||||||
rewrittenURL = rewrittenURL.replace(createRegex(replacement.regex), replacement.replacement);
|
rewrittenURL = rewrittenURL.replace(createRegex(replacement.regex), replacement.replacement);
|
||||||
|
@ -4253,6 +4254,72 @@ if (!cluster.isPrimary) {
|
||||||
|
|
||||||
var origHref = href;
|
var origHref = href;
|
||||||
|
|
||||||
|
// Add web root postfixes
|
||||||
|
if(!isProxy) {
|
||||||
|
var urlWithPostfix = req.url;
|
||||||
|
wwwrootPostfixesVHost.every(function (postfixEntry) {
|
||||||
|
if (matchHostname(postfixEntry.host) && !(postfixEntry.skipRegex && req.url.match(createRegex(postfixEntry.skipRegex)))) {
|
||||||
|
urlWithPostfix = "/" + postfixEntry.postfix + req.url;
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (urlWithPostfix != req.url) {
|
||||||
|
serverconsole.resmessage("Added web root postfix: " + req.url + " => " + urlWithPostfix);
|
||||||
|
req.url = urlWithPostfix;
|
||||||
|
uobject = parseURL(req.url);
|
||||||
|
search = uobject.search;
|
||||||
|
href = uobject.pathname;
|
||||||
|
ext = path.extname(href).toLowerCase();
|
||||||
|
ext = ext.substr(1, ext.length);
|
||||||
|
|
||||||
|
try {
|
||||||
|
decodedHref = decodeURIComponent(href);
|
||||||
|
} catch (err) {
|
||||||
|
// Return 400 error
|
||||||
|
callServerError(400);
|
||||||
|
serverconsole.errmessage("Bad request!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var sHref = sanitizeURL(href);
|
||||||
|
var preparedReqUrl2 = uobject.pathname + (uobject.search ? uobject.search : "") + (uobject.hash ? uobject.hash : "");
|
||||||
|
|
||||||
|
if (req.url != preparedReqUrl2 || sHref != href.replace(/\/\.(?=\/|$)/g, "/").replace(/\/+/g, "/")) {
|
||||||
|
callServerError(403);
|
||||||
|
serverconsole.errmessage("Content blocked.");
|
||||||
|
return;
|
||||||
|
} else if (sHref != href) {
|
||||||
|
var rewrittenAgainURL = uobject;
|
||||||
|
rewrittenAgainURL.path = null;
|
||||||
|
rewrittenAgainURL.href = null;
|
||||||
|
rewrittenAgainURL.pathname = sHref;
|
||||||
|
rewrittenAgainURL.hostname = null;
|
||||||
|
rewrittenAgainURL.host = null;
|
||||||
|
rewrittenAgainURL.port = null;
|
||||||
|
rewrittenAgainURL.protocol = null;
|
||||||
|
rewrittenAgainURL.slashes = null;
|
||||||
|
rewrittenAgainURL = url.format(rewrittenAgainURL);
|
||||||
|
serverconsole.resmessage("URL sanitized: " + req.url + " => " + rewrittenAgainURL);
|
||||||
|
req.url = rewrittenAgainURL;
|
||||||
|
uobject = parseURL(req.url);
|
||||||
|
search = uobject.search;
|
||||||
|
href = uobject.pathname;
|
||||||
|
ext = path.extname(href).toLowerCase();
|
||||||
|
ext = ext.substr(1, ext.length);
|
||||||
|
try {
|
||||||
|
decodedHref = decodeURIComponent(href);
|
||||||
|
} catch (err) {
|
||||||
|
// Return 400 error
|
||||||
|
callServerError(400);
|
||||||
|
serverconsole.errmessage("Bad request!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Rewrite URLs
|
// Rewrite URLs
|
||||||
rewriteURL(req.url, rewriteMap, function(err, rewrittenURL) {
|
rewriteURL(req.url, rewriteMap, function(err, rewrittenURL) {
|
||||||
if (err) {
|
if (err) {
|
||||||
|
|
Reference in a new issue