RewriteLock используется с ключевым словом prg:
. RewriteMap может использоваться с несколькими ключевыми словами, для использования текстовых файлов (txt:
), хеш-файлов (dbm:
), рандомизированного текста (rnd:
) или сценариев внешнего сопоставления (это prg:
ключевое слово). В этом режиме внешний скрипт запускается при запуске apache. Затем для каждого входящего запроса, когда mod-rewrite вызывает отображение prg:
, apache отправляет входные данные этому сценарию и считывает выходной поток, чтобы получить значение.
RewriteLock должен использоваться в этом случае для предотвращения параллельных запросов (например, параллельных входов к этому внешнему процессу) для смешивания ответов на стандартный вывод этого процесса. Это механизм блокировки (файл, заданный путь, который является классическим токеном, только один пользователь) для обеспечения сериализации вызовов к этому внешнему сценарию отображения. ИМХО, это должно быть прозрачно применено mod-rewrite при использовании prg: как я никогда не находил случай prg, где эта блокировка не обязательна .
Редактировать:
На самом деле вы могли бы использовать внешний prg: без rewriteLock, если рандомизация выходных данных не является проблемой, т.е. для данной записи вы можете получить ответ, который был дан для другой записи, как в сценарии, выполняющем некоторые расширенные rnd :, ваш собственный сервис круговой проверки. Но если выходные данные должны отражать запись, то вам нужен этот семафор, который, конечно, может замедлить процесс перезаписи карты.
Так что, если вы используете только hashmap или textmap, вам не нужно устанавливать RewriteLock.
Редактировать:
Вы можете найти полезную информацию в этом потоке , например, тот факт, что файл блокировки существует только в течение нескольких миллисекунд, когда apache вызывает prg и ожидает ответа.
Edit:
На вопрос один странный факт:
Оригинальный разработчик использовал файл .htaccess с RewriteMap
Это странно, потому что RewriteMap не может работать с файлами .htaccess, .htaccess - записи конфигурации, которые читаются динамически, а RewriteMap, как указано здесь в строке Context , можно установить только в главном Конфигурация или в конфигурации VirtualHost. Это не может быть в местоположении, каталоге или .htaccess. Так что, скорее всего, это никогда не сработает в .htaccess.
Теперь @puk попросил привести пример использования RewriteMap. Что ж, поиск «RewriteMap» в переполнении стека покажет вам несколько реальных примеров: