Существует нечто, называемое RewriteMap.
Вы можете вызвать исполняемый скрипт, который вернет URL для перезаписи.
Проверьте эту статью для получения дополнительной информации и примеров (на Perl, но полностью применимы к любому другому языку):
http://www.onlamp.com/pub/a/apache/2005/04/28/apacheckbk.html
Сводка предостережений:
- Необходимо запустить цикл чтения STDIN (т. Е. Не завершать работу после получения URL-адреса)
- Необходимо напечатать URL-адрес, чтобы переписать его на ЗАКРЫТЫЙ символ новой строки
- Должен быть читаемым и исполняемым пользователем. Apache запускается как
Это способ создания карты
RewriteMap fixurl prg:/usr/local/scripts/fixit.php
И теперь мы можем использовать его в RewriteRule:
RewriteEngine On
RewriteRule (.*) ${fixurl:$1}
РЕДАКТИРОВАТЬ: Об внутренней ошибке сервера. Наиболее вероятная причина - то, что упоминает Гамбо, RewriteMap нельзя использовать в .htaccess, к сожалению. Вы можете использовать его в RewriteRule в .htaccess, но можете создавать его только в конфигурации сервера или конфигурации виртуального хоста. Чтобы быть уверенным, проверьте журнал ошибок.
Таким образом, единственным решением для PHP / .htaccess было бы переписать все в определенную программу PHP, которая выполняет проверку и перенаправляет, используя заголовок Location. Что-то вроде:
RewriteRule (.*) proxy.php?args=$1 [QSA]
Затем в proxy.php
<?php
$url = get_proper_destination($QUERY_STRING); #args will have the URI path,
#and, via QSA you will have
#the original query string
header("Location: $url");
?>