Интересно, знает ли кто-нибудь, есть ли способ настроить Apache так, чтобы URL-адрес http://myurl.com/clips/song1.mp3 делает выборку Apache song1.mp3 в любом directory1 или directory2?
Заранее спасибо!
-Алекс
Есть несколько способов добиться этого.
Один из предложенных вариантов - просто написать страницу PHP под названием clips.php
и имеют Options +MultiViews
в любом <Directory>
заявление в httpd.conf
файл или в .htaccess
файл в каталоге DocumentRoot, где clips.php
расположен. Я использую этот метод для обработки моих Менеджер политики ключей GPG с помощью PATH_INFO
для управления несколькими функциями через один и тот же файл PHP. Затем вы можете просто проанализировать PATH_INFO
для запрашиваемого имени файла найдите в любом каталоге файл для вывода обратно клиенту, убедившись, что установлен правильный header()
функции для содержимого перед началом потоковой передачи файла.
Другой вариант, который я использовал в прошлом, состоял в том, чтобы определить, какой каталог (directory1 или directory2) был основным и сделать /clips/
ан Alias
для этого каталога. Затем настройте mod_rewrite
правило, которое проверяет наличие файлов в другом каталоге и передает эту копию Apache. Я использовал это больше в случае, когда мне нужно переопределить существующий файл в каталоге, обычно заменяя файл более новой копией, которая находится в веб-приложении.
Оба предложения зависят от того, пишете ли вы сценарии или ваши навыки модификации конфигурации сильнее. Создание файла PHP может быть более универсальным средством для достижения этой цели, но это далеко не единственное доступное средство для выполнения той же задачи.
Помимо творческого использования mod_rewrite, вы можете захотеть изучить использование unionfs для объединения нескольких каталогов на уровне файловой системы. В любом случае рекомендуется использовать «EnableSendfile off» всякий раз, когда вы обслуживаете FUSE.
Есть несколько способов справиться с этим.
Самый простой - сделать так, чтобы «клипы» были CGI или другим сценарием, который просматривает отправленный PATH_INFO, а затем просматривает нужные вам каталоги.
... и для менее прямолинейных ... сделайте 'clips' указателем на 'directory1', затем добавьте обработчик 404 для этого каталога, который будет искать в directory2, корректируя ответ, если он находит файл.
Используя .htaccess, mod_rewrite и php, я делал это раньше.
.htaccess выглядит так, например:
RewriteEngine on
RewriteRule ^clips\.*$ /path/to/script/script.php?i=$1
В вашем PHP-скрипте вы получите переменную i и разделите информацию о пути:
$file=basename($_GET['i']);
Очистите $ file, чтобы предотвратить чтение любого файла в системе. Затем используйте выражения PHP для поиска и посмотрите, какой каталог, если он есть, обслуживать. Вы также можете выполнять любые виды отслеживания или обработки с помощью этого php-скрипта.