Skip to content

Instantly share code, notes, and snippets.

@sgrasso
Created November 2, 2016 19:59
Show Gist options
  • Save sgrasso/da2117f8dba571ed3fec16dd91605642 to your computer and use it in GitHub Desktop.
Save sgrasso/da2117f8dba571ed3fec16dd91605642 to your computer and use it in GitHub Desktop.
Convert a CSV file of url redirects into a redirect.conf file for use in Apache
/************************
--Usage
node covertCSV.js filename.csv > redirect.conf
CSV column A contains base URL and column B contains the Redirect URL.
Generates redirects based off of unique GUID in query string if present.
************************/
var fs = require('fs');
var buffer = "";
var stream = fs.createReadStream(process.argv[process.argv.length - 1]);
stream.addListener('data', function(data){
buffer += data.toString();
});
stream.addListener('end', function(){
var parts = buffer.split('\r\n');
var urlSplit = "";
var uids = [], uid = "";
for (var i = 0; i < parts.length; i++) {
if (parts[i].length !== 0){
var urls = parts[i].split(",");
if (urls[0].search('uid=') != -1){
uid = urls[0].match(/[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{16}/gi);
if (uid != null)
uids.push(uid);
}
else if (i !== 0){
if( urls[0].search('vanityurl') !== -1){
urls[0] = urls[0].replace(/\s|(http:\/\/www)/g,'');
urlSplit = urls[0].split("/");
console.log("RewriteCond %{HTTP_HOST} (.*?)" + urlSplit[0] + "$ [NC]");
console.log("RewriteCond %{REQUEST_URI} ^/" + urlSplit[1] + "(.*)$ [NC]")
console.log("RewriteRule ^(.*)$ "+ urls[1] + " [QSA,L,R=301]\n\r");
} else {
console.log("RewriteCond %{REQUEST_URI} ^" + urls[0].replace(/\s/g,'') + "(.*)$ [NC]\n\r");
console.log("RewriteRule ^/(.*) " + urls[1].replace(/ /g,'') + "%1 [R=301,L]\n\r");
}
}
}
};
if (uids.length){
console.log("RewriteCond %{HTTP_HOST} .*?www.examplevanityurl.com$ [NC]");
console.log("RewriteCond %{QUERY_STRING} uid=" + uids.join("|") + "[NC]");
console.log("RewriteRule ^(.*)$ www.example.vanity.com [QSA,L,R=301]");
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment