Apache - обслуживать все файлы в подкаталогах

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

Examples:
www.example.com/_misc/chatlog.txt
www.example.com/_misc/food/burgers.jpg
www.example.com/_misc/sounds/soundclip.mp3

Can all be accessed as:
www.example.com/chatlog.txt
www.example.com/burgers.jpg
www.example.com/soundclip.mp3

Кроме того, мне нужно, чтобы остальная часть файловой системы обслуживалась как обычно. У меня есть другие файлы в корне, которые я буду хранить, а также несколько сайтов Wordpress и папок авторизации и просто общие вещи, связанные с сервером.

Я пытался использовать псевдоним, который почти мог работать. Я не против настроить каждую папку внутри _misc, так как там <12. Однако я не думаю, что псевдоним позволяет несколько вызовов на "/", а также перенаправляет фактический "/" на "_misc".

mod_rewrite может почти сработать, если он позволит мне использовать регулярные выражения на стороне каталога.

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

Есть другие идеи? Благодарю.

1 ответ

Решение

Вы можете использовать следующие, непроверенные, mod_rewrite rewriterules. Обратите внимание, что это потенциально обременительно для сервера, поскольку для каждого запроса к серверу выполняется много подзапросов, чтобы проверить, существуют ли файлы на сервере. В результате сервер, скорее всего, не сможет обслуживать столько запросов / минут, сколько мог бы в противном случае. Трюк с переменной окружением позволяет предотвратить еще большее количество запросов.

Если вы можете, используйте это в httpd.conf вместо.htaccess.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ - [E=notfound:1]

RewriteCond %{ENV:notfound} =1
RewriteCond %{DOCUMENT_ROOT}/_misc/$1 -f
RewriteRule ^([^/]+)$ /_misc/$1 [L,E=!notfound]

RewriteCond %{ENV:notfound} =1
RewriteCond %{DOCUMENT_ROOT}/_misc/food/$1 -f
RewriteRule ^([^/]+)$ /_misc/food/$1 [L,E=!notfound]

RewriteCond %{ENV:notfound} =1
RewriteCond %{DOCUMENT_ROOT}/_misc/sounds/$1 -f
RewriteRule ^([^/]+)$ /_misc/sounds/$1 [L,E=!notfound]

Я не уверен, если %{DOCUMENT_ROOT} содержит косую черту или нет. Возможно, вам придется написать это как %{DOCUMENT_ROOT}_misc вместо.

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