nasg/magic.php
2017-05-31 13:54:14 +01:00

90 lines
2.2 KiB
PHP

<?php
function redirect_to($uri) {
header('HTTP/1.1 301 Moved Permanently');
if (preg_match("/^https?/", $uri))
$target = $uri;
else
$target = '{{ site.url }}/'. trim($uri, '/') . '/';
header("Location: ". $target);
exit;
}
function gone($uri) {
header('HTTP/1.1 410 Gone');
die('<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<meta content="width=device-width,initial-scale=1,minimum-scale=1" name="viewport"/>
<title>Gone</title>
</head>
<body>
<h1>This content was deleted.</h1>
</body>
</html>');
}
function notfound() {
header('HTTP/1.0 404 Not Found');
die('<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<meta content="width=device-width,initial-scale=1,minimum-scale=1" name="viewport"/>
<title>Not found</title>
</head>
<body>
<h1>This was not found.</h1>
<h2>Please search for it instead.</h2>
<p>
<form action="/search" class="search-form" method="get" role="search">
<label for="search">Search</label>
<input id="s" name="s" placeholder="search..." title="Search for:" type="search" value=""/>
<input type="submit" value="OK"/>
</form>
</p>
</body>
</html>');
}
function maybe_redirect($uri) {
if (file_exists("./$uri/index.html")) {
redirect_to($uri);
}
}
$redirects = array(
{% for (from, to) in redirects %}
"{{ from }}" => "{{ to }}",
{%- endfor -%}
);
$gone = array(
{% for gone in gones %}
"{{ gone }}" => true,
{%- endfor -%}
);
$uri = filter_var($_SERVER['REQUEST_URI'], FILTER_SANITIZE_URL);
$uri = str_replace('../', '', $uri);
$uri = str_replace('/feed/', '', $uri);
$uri = str_replace('/atom/', '', $uri);
$uri = trim($uri, '/');
if (isset($gone[$uri]))
gone($uri);
elseif (isset($redirects[$uri]))
redirect_to($redirects[$uri]);
// replace _ with - and look for a file
elseif (strstr($uri, '_'))
maybe_redirect(str_replace('_', '-', $uri));
// try getting rid of -by-xyz
elseif (stristr($uri,'-by-'))
maybe_redirect(preg_replace('/(.*?)-by-.*$/i','${1}',$uri));
// try getting rid of -2, WordPress artifacts
elseif (stristr($uri,'-2'))
maybe_redirect(preg_replace('/(.*?)-2$/i','${1}',$uri));
else
notfound();