Вы можете по существу сделать это двумя способами:
Добавьте файл с именем .htaccess
в корневую папку и добавьте что-то вроде этого:
RewriteEngine on
RewriteRule ^/?Some-text-goes-here/([0-9]+)$ /picture.php?id=$1
Это скажет Apache, чтобы включить mod_rewrite для этой папки, и если ему будет задан URL-адрес, соответствующий регулярному выражению, он переписывает его внутренне на то, что вы хотите, без конца пользователь посмотрев. Легко, но негибко, поэтому, если вам нужно больше энергии:
Вместо этого вместо этого введите вместо этого .htaccess: (обратите внимание на ведущую косую черту)
FallbackResource /index.php
Это скажет, чтобы он запускал ваш index.php
для всех файлов, которые он обычно не может найти на вашем сайте. Там вы можете, например:
$path = ltrim($_SERVER['REQUEST_URI'], '/'); // Trim leading slash(es)
$elements = explode('/', $path); // Split path on slashes
if(empty($elements[0])) { // No path elements means home
ShowHomepage();
} else switch(array_shift($elements)) // Pop off first item and switch
{
case 'Some-text-goes-here':
ShowPicture($elements); // passes rest of parameters to internal function
break;
case 'more':
...
default:
header('HTTP/1.1 404 Not Found');
Show404Error();
}
Это то, как это делают большие сайты и CMS-системы, поскольку это позволяет гораздо большую гибкость в анализе URL-адресов, конфигурационных и зависимых от базы данных URL-адресов и т. Д. Для спорадического использования жестко закодированные правила перезаписи в .htaccess
сделают все возможное.
Предполагая, что информация о распределении элементов отсутствует (мы не знаем, что какой-либо элемент более распространен, чем другие), мы можем использовать следующую технику.
Минимальный объем информации, необходимой для хранения одного из 4 значений - всего 2 бита: 00, 01, 10 или 11 могут представлять 4 отдельных элемента на карте. Затем, если у вас есть n
символов в вашей строке, вы можете преобразовать это в битовую строку длины 2n
, например, строка 12313
становится битовой строкой 01 10 11 01 11
(с добавлением пробелов для ясности).
Если вы используете базовое кодирование строки 36 (используя 10 цифр плюс 26 символов), вы можете повернуть 5 бит за один раз в один символ (начиная с 2 ^ 5 = 32 и = 36). В результате получается строка из 2/5 * n
символов или сжатие 2.5x
по сравнению с вашей исходной строкой.
Вы можете выжать больше из этой технологии, используя другую кодировку с более разными символами. Например, 10 цифр + 26 букв в верхнем регистре + 26 строчных букв + 2 символа пунктуации = 64 символа, поэтому вы можете превратить 6 бит в один печатный символ ASCII с использованием такого типа кодирования.
Если распределение элементов очень искажено (например, 0 очень распространено, а 1, 2 и 3 очень редки), то вы можете взглянуть на кодировку Хаффмана . Однако я предлагаю сначала использовать описанный выше подход, поскольку он намного проще и понятнее.