mod-rewrite: поиск файла в нескольких каталогах

Вот интересная проблема:

Я пытаюсь разделить несколько файлов в системе на несколько пакетов и получить к ним доступ без явного указания, в каком пакете находится файл.

Вот пример: скажем, файл /package1/one.htm в /package1 а также /package2/two.htm в /package2, С конфигурацией ниже, я буду иметь доступ к ним напрямую, например. http://localhost/one.htm

RewriteCond %{DOCUMENT_ROOT}/package1%{REQUEST_URI} -f
RewriteRule ^(.*) /package1$1 [L]

RewriteCond %{DOCUMENT_ROOT}/package2%{REQUEST_URI} -f
RewriteRule ^(.*) /package2$1 [L] 

RewriteCond %{DOCUMENT_ROOT}/package3%{REQUEST_URI} -f
RewriteRule ^(.*) /package3$1 [L]

Проблема в том, что я хотел бы иметь возможность добавлять больше пакетов без обновления этого файла конфигурации Apache (и без необходимости перезапуска Apache). Я думал о чем-то вроде:

RewriteCond %{DOCUMENT_ROOT}/package(.*)%{REQUEST_URI} -f
RewriteRule ^(.*) /package%1$1 [L]

Но, к сожалению, приведенный выше код не работает, так как невозможно получить совпадение с RewriteCond ((.*)), а затем применить его к RewriteRule, По крайней мере, это было мое понимание этого.

Можете ли вы придумать творческий способ решения этой проблемы?

1 ответ

Решение

Используйте программный RewriteMap:

RewriteMap rewriter prog:/path/to/script
RewriteRule ^(.*) %{rewriter:$1} [L]

А затем в своем сценарии возьмите любую часть пути запроса, которую вы хотите, переберите свои каталоги и верните соответствующую строку перезаписи.

Другие вопросы по тегам