Назад | Перейти на главную страницу

Могу ли я произвести простой расчет в RewriteRule?

Изменение структуры сайта означает необходимость изменения URL-адресов с

site/11-foo/21-bar 

к

site/1-foo/1-bar

т.е. я хочу использовать RewriteRule для вычитания константы (в этом примере 10) из целого числа во втором аргументе и другой константы (в этом примере 20) из целого числа в третьем аргументе.

Эти простые вычисления сэкономят буквально миллионы 301 редиректа, которые потребуют обработки. Есть ли способ сделать это с помощью mod_rewrite?

Нет, но вы можете использовать RewriteMap и обрабатывать свои переменные внешней программой:

http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritemap

MapType: prg, MapSource: путь файловой системы Unix к допустимому обычному файлу

Здесь источником является программа, а не файл карты. Для его создания вы можете использовать любой язык по вашему выбору, но результатом должна быть исполняемая программа (либо объектный код, либо сценарий с трюком с волшебным куки-файлом '#! / Path / to / интерпретатор' в качестве первой строки).

Эта программа запускается один раз при запуске сервера Apache, а затем связывается с механизмом перезаписи через его дескрипторы файлов stdin и stdout. Для каждого поиска функции карты он будет получать ключ для поиска в виде строки, завершающейся новой строкой на стандартном вводе. Затем он должен вернуть искомое значение в виде строки, завершающейся новой строкой на стандартном выводе, или четырехсимвольной строки `` NULL '', если он не работает (т.е. нет соответствующего значения для данного ключа). Тривиальная программа, которая реализует карту 1: 1 (т.е. ключ == значение), может быть:

#!/usr/bin/perl
$| = 1;
while (<STDIN>) {
    # ...put here any transformations or lookups...
    print $_;
}

В нем нет расчета, http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html

Хотя у него есть группировка (количество вхождений) и сопоставление, я бы рекомендовал вам использовать глобальное перенаправление на основной index.php и оттуда создать страницу, которую она должна отображать по данным запроса (получить, опубликовать, cookie и т. Д.) это то, что делают большие форумы и большинство CMS (примеры: vbulletin, wordpress, ipb) ...