Add htaccess for clean URLs

Also rename main files to index.php to avoid the need for custom directory indices.

Attached is a script for testing.
This commit is contained in:
2022-01-15 00:23:31 +01:00
parent 0ec0fda566
commit fc450e4984
3 changed files with 115 additions and 12 deletions

View File

@@ -1,3 +1,26 @@
ErrorDocument 404 /main.php?page=404
DirectoryIndex mainkrk.php main.php index.php start.html index.html
Options -Indexes
ErrorDocument 404 /index.php?page=404
# Redirect old URLs to new ones
RewriteCond &%{QUERY_STRING} &lang=(cs|en|de) [NC]
RewriteCond %1@&%{QUERY_STRING} (cs|en|de)@.*&page=([^&]+) [NC]
RewriteRule ^((index|mainkrk|print)\.php)?(\?.*)?$ /krk/%1/%2.html [R=301,QSD,L,nosubreq]
RewriteCond &%{QUERY_STRING} &page=([^&]+) [NC]
RewriteRule ^((index|mainkrk|print)\.php)?(\?.*)?$ /krk/%1.html [R=301,QSD,L,nosubreq]
RewriteCond &%{QUERY_STRING} &lang=(cs|en|de) [NC]
RewriteRule ^((index|mainkrk|print)\.php)?(\?.*)?$ /krk/%1/ [R=301,QSD,L,nosubreq]
# Canonization
RewriteRule ^cs(?:/(.*))?$ /krk/$1 [R=301,L]
RewriteRule ^(en|de)$ /krk/$1/ [R=301,L]
RewriteRule ^(mainkrk|index|print).php$ /krk/ [R=301,L]
### Fall back to loading pages through our “CMS”
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-f
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-d
RewriteRule ^(en|de)/$ /krk/index.php?lang=$1 [END]
RewriteRule ^(en|de)/(.+)\.html$ /krk/index.php?page=$2&lang=$1 [END]
RewriteRule ^(.+)\.html$ /krk/index.php?page=$1 [END]
RewriteRule ^(en|de)/(.+)/$ /krk/index.php?page=$2&lang=$1 [END]
RewriteRule ^(.+)/$ /krk/index.php?page=$1 [END]

View File

@@ -1,6 +1,8 @@
<?php
$lang = empty($_GET['lang']) ? 'cs' : $_GET['lang'];
$page = $_GET['page'] ?? '';
ob_start();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
@@ -140,10 +142,10 @@ echo '<span class="floatright">';
if (file_exists("pages/$page-de.php") || file_exists("pages/$page/$page-de.php")) {
if (file_exists("pages/$page/$page-de.php")) {
$lngc = 'de';
$icona = "<a href=\"mainkrk.php?page=$page/$page&lang=$lngc\"><img src=\"/images/" . $lngc . 'f.png" alt=""></a>';
$icona = "<a href=\"/krk/$lngc/$page/$page.html\"><img src=\"/images/" . $lngc . 'f.png" alt=""></a>';
} else {
$lngc = 'de';
$icona = '<a href="mainkrk.php?page=' . htmlspecialchars($page) . "&lang=$lngc\"><img src=\"/images/" . $lngc . 'f.png" alt=""></a>';
$icona = "<a href=\"/krk/$lngc/" . htmlspecialchars($page) . '.html"><img src="/images/' . $lngc . 'f.png" alt=""></a>';
}
if ($lang == 'de') {
@@ -155,10 +157,10 @@ if (file_exists("pages/$page-de.php") || file_exists("pages/$page/$page-de.php")
if (file_exists('pages/' . htmlspecialchars($page) . '-en.php') || file_exists('pages/' . htmlspecialchars($page) . '/' . htmlspecialchars($page) . '-en.php')) {
if (file_exists('pages/' . htmlspecialchars($page) . '/' . htmlspecialchars($page) . '-en.php')) {
$lngc = 'en';
$icona = '<a href="mainkrk.php?page=' . htmlspecialchars($page) . '/' . htmlspecialchars($page) . "&lang=$lngc\"><img src=\"/images/" . $lngc . 'f.png" alt=""></a>';
$icona = "<a href=\"/krk/$lngc/" . htmlspecialchars($page) . '/' . htmlspecialchars($page) . '.html"><img src="/images/' . $lngc . 'f.png" alt=""></a>';
} else {
$lngc = 'en';
$icona = '<a href="mainkrk.php?page=' . htmlspecialchars($page) . "&lang=$lngc\"><img src=\"/images/" . $lngc . 'f.png" alt=""></a>';
$icona = "<a href=\"/krk/$lngc/" . htmlspecialchars($page) . '.html"><img src="/images/' . $lngc . 'f.png" alt=""></a>';
}
if ($lang == 'en') {
echo '';
@@ -167,7 +169,7 @@ if (file_exists('pages/' . htmlspecialchars($page) . '-en.php') || file_exists('
}
} elseif ($page === '' && file_exists('pages/krk_default-en.php')) {
$lngc = 'en';
$icona = "<a href=\"mainkrk.php?page=krk_default&lang=$lngc\"><img src=\"/images/" . $lngc . 'f.png" alt=""></a>';
$icona = "<a href=\"/krk/$lngc/\"><img src=\"/images/" . $lngc . 'f.png" alt=""></a>';
if ($lang == 'en') {
echo '';
} else {
@@ -177,10 +179,10 @@ if (file_exists('pages/' . htmlspecialchars($page) . '-en.php') || file_exists('
if (file_exists('pages/' . htmlspecialchars($page) . '.php') || file_exists('pages/' . htmlspecialchars($page) . '/' . htmlspecialchars($page) . '.php')) {
if (file_exists('pages/' . htmlspecialchars($page) . '/' . htmlspecialchars($page) . '.php')) {
$lngc = '';
$icona = '<a href="mainkrk.php?page=' . htmlspecialchars($page) . '/' . htmlspecialchars($page) . $lngc . '"><img src="/images/' . $lngc . 'f.png" alt=""></a>';
$icona = '<a href="/krk/' . htmlspecialchars($page) . '/' . htmlspecialchars($page) . '.html"><img src="/images/' . $lngc . 'f.png" alt=""></a>';
} else {
$lngc = '';
$icona = '<a href="mainkrk.php?page=' . htmlspecialchars($page) . $lngc . '"><img src="/images/' . $lngc . 'f.png" alt=""></a>';
$icona = '<a href="/krk/' . htmlspecialchars($page) . '.html"><img src="/images/' . $lngc . 'f.png" alt=""></a>';
}
if ($lang == 'cs') {
@@ -189,9 +191,9 @@ if (file_exists('pages/' . htmlspecialchars($page) . '.php') || file_exists('pag
echo $icona;
}
}
if ($lang == 'en' && empty($page)) {
if ($lang == 'en' && ($page === '' || $page === 'krk_default')) {
$lngc = '';
$icona = '<a href="mainkrk.php?page=krk_default"><img src="/images/' . $lngc . 'f.png" alt=""></a>';
$icona = '<a href="/krk/"><img src="/images/' . $lngc . 'f.png" alt=""></a>';
echo $icona;
}
echo '</span>';

78
test.fish Normal file
View File

@@ -0,0 +1,78 @@
set -g domain 'http://new.tojnar.cz'
set -g failed 0
function fail
set -l message $argv[1]
set -l output_file $argv[2]
echo "$message" > /dev/stderr
cat "$output_file" > /dev/stderr
set failed (math $failed + 1)
end
function test_request
set -l uri $argv[1]
set -l argc (count $argv)
echo "Testing $domain$uri" > /dev/stderr
set output_file (mktemp)
curl --silent --location --head "$domain$uri" > "$output_file"
set last_status (cat "$output_file" | grep --perl-regexp 'HTTP/.+ \K([0-9]{3})' --only-matching | tail -n 1 | string trim)
set last_location (cat "$output_file" | grep --perl-regexp 'Location: \K(.+)' --only-matching | tail -n 1 | string trim)
set -l expected_status 200
if test "$argc" -ge 2
set expected_status $argv[2]
end
if test "$last_status" != "$expected_status"
fail "ERROR: Expected status $expected_status, $last_status received" "$output_file"
return
end
if test "$argc" -ge 3
set -l expected_location $argv[3]
if test -z "$last_location"
fail "ERROR: Expected location $expected_location but no received" "$output_file"
return
else if test "$last_location" != "$domain$expected_location"
fail "ERROR: Expected location $expected_location, $last_location received" "$output_file"
return
end
else if test -n "$last_location"
fail "ERROR: Unexpected location $last_location received" "$output_file"
return
end
echo "OK" > /dev/stderr
echo > /dev/stderr
end
test_request '/krk?lang=cs&page=krk_default' 200 '/krk/'
test_request '/krk?lang=en&page=krk_default' 200 '/krk/en/'
test_request '/krk?lang=cs' 200 '/krk/'
test_request '/krk?lang=en' 200 '/krk/en/'
test_request '/krk/mainkrk.php?page=clanky/beskydy-2010' 200 '/krk/clanky/beskydy-2010.html'
test_request '/krk/mainkrk.php?page=clanky/beskydy' 404 '/krk/clanky/beskydy.html'
test_request '/krk/?page=mcr_2009' 200 '/krk/mcr_2009/'
test_request '/krk/?page=mcr_2009/mcr_2009' 200 '/krk/mcr_2009/'
test_request '/krk/?page=mcr_2009/probihani_loucna/probihani_loucna' 200 '/krk/mcr_2009/probihani_loucna/'
test_request '/krk/?page=clanky' 200 '/krk/clanky/'
test_request '/krk/?page=clanky/clanky' 200 '/krk/clanky/'
test_request '/krk/?page=mcr_2009/' 200 '/krk/mcr_2009/'
test_request '/krk/?page=foo/' 404 '/krk/foo/'
test_request '/krk' 200 '/krk/'
test_request '/krk/cs/' 200 '/krk/'
test_request '/krk/en/'
test_request '/krk/en' 200 '/krk/en/'
test_request '/krk/cs' 200 '/krk/'
test_request '/krk/mainkrk.php' 200 '/krk/'
test_request '/krk/cs/mcr_2009/mcr_2009.html' 200 '/krk/mcr_2009/mcr_2009.html'
test_request '/krk/en/mcr_2009/mcr_2009.html'
test_request '/krk/clanky/beskydy-2010.html'
test_request '/krk/clanky/beskydy.html' 404
if test $failed = 0
echo "All tests passed" > /dev/stderr
else
echo "$failed tests failed" > /dev/stderr
exit 1
end