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
вместо.