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]
А затем в своем сценарии возьмите любую часть пути запроса, которую вы хотите, переберите свои каталоги и верните соответствующую строку перезаписи.