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

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. По крайней мере, так я это понимал.

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

Используйте алгоритмические продажи RewriteMap:

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

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