diff options
author | Dennis Eriksen <d@ennis.no> | 2019-11-01 13:31:38 +0100 |
---|---|---|
committer | Dennis Eriksen <d@ennis.no> | 2019-11-01 13:31:38 +0100 |
commit | 2dd3a24d39e35cfe398685c4abdfd9bb85dc2a0c (patch) | |
tree | 87ca733a8355a5e173026fdd3e906dc021e027a6 /redirect | |
download | purl-2dd3a24d39e35cfe398685c4abdfd9bb85dc2a0c.tar.gz |
Initial commit
Diffstat (limited to 'redirect')
-rwxr-xr-x | redirect | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/redirect b/redirect new file mode 100755 index 0000000..c471831 --- /dev/null +++ b/redirect @@ -0,0 +1,43 @@ +#!/bin/perl -wT +# (c) 2019 Dennis Eriksen <https://dnns.no> + +use strict; +use warnings; + +use CGI; +use DBI; + +my $q = CGI->new; # create CGI object + +# create database handler +my $dbh = DBI->connect("dbi:Pg:dbname=purl") or die $DBI::errstr; + +# set the short +my $short = $ENV{REQUEST_URI}; +$short =~ s/^\///; + +# SQL Query +my $query = qq(SELECT shorts.url FROM shorts WHERE shorts.short = ?;); + +# run the query, and do an if on it +if (my $url = $dbh->selectrow_array($query, undef, $short)) { + $query = qq(UPDATE shorts SET count = count + 1, last_visited = now() WHERE short = ?;); + my $sth = $dbh->prepare( $query ); + my $rv = $sth->execute( $short ) or die $sth->errstr; + print $q->redirect($url); +} +else { + print $q->header(-status=>'404 Not found',-charset=>'utf-8'); + print <<notfound +<html> +<head><title>404 Not Found</title></head> +<body> +<center><h1>404 Not Found</h1></center> +<hr><center>nginx</center> +</body> +</html> +notfound +} + +# disconnect from database +$dbh->disconnect(); |