Я хочу создать настройку в apache, где мои медиафайлы разделены с моего кода (для простого управления проектами). Идея, которую я создал, - иметь корневой каталог (/ home/villermen/httpd/root), который содержит весь код (файлы php, файлы css и т. Д.) И медиа-каталог (/ home/villermen/httpd/media), который содержит все нетекстовые файлы.Обслуживание файлов из нескольких корневых каталогов в apache
Выполнение этой установки оказалось сложным. Я пытаюсь использовать mod_rewrite для работы с файлами из медиа-каталога, если они существуют, но пока я пока не добился успеха.
Вот часть моей httpd.conf, в котором я пытаюсь сделать волшебство произойдет:
DocumentRoot /home/villermen/httpd/root
RewriteEngine on
<Directory /home/villermen/httpd/root>
Order allow,deny
Allow from all
AllowOverride All
#...other magic magoo, including rewriterules that do work
</Directory>
<Directory /home/villermen/httpd/media>
Order allow,deny
Allow from allow
AllowOverride All
</Directory>
#Serve from media if file exists there
RewriteCond "/home/villermen/httpd/media%{REQUEST_URI}" -f
RewriteRule "^/?(.*)$" "/home/villermen/httpd/media/$1"
Попытка получить доступ к файлу, который существует в папке медиа-прежнему будет бросать 404, я на потеря здесь. Я ничего не вижу?
Я использую apache 2.4 на ubuntu 14.04.
РЕДАКТИРОВАТЬ: Удаление RewriteCond в целом все равно не приведет к какой-либо магии. mod_rewrite должен работать за пределами тегов Directory правильно?
ОБНОВЛЕНИЕ: см. Возможный ответ @ kannan-mohan. В конце концов, я пошел за подход увязывания папку медиа с вебсервера, чтобы это папка, а затем переписывать все, чтобы там:
DocumentRoot /home/villermen/httpd/root
Alias /media /home/villermen/httpd/media
<Directory /home/villermen/httpd/root>
#Serving files from media if they exists there
RewriteCond "/home/villermen/httpd/media%{REQUEST_URI}" -f
RewriteRule "^(.*)$" "/media/$1"
</Directory>
<Directory /home/villermen/httpd/media>
Order allow,deny
allow from all
AllowOverride All
</Directory>
Нет, на самом деле то, что я хочу достичь, похоже на это: 'http: // example.com/ hello.jpg' должен отображаться на'/home/villermen/httpd/media/hello.jpg', если он существует, иначе он должен просто загрузиться из документа. ('/ Дома/villermen/HTTPD/корень/hello.jpg'). Простой псевдоним здесь не хватит, так как это не допускает этого пошагового поведения. – Villermen
можно будет хранить каталог 'media' внутри' DocumentRoot'. i.e разместить медиа внутри как '/ home/villermen/httpd/root/media'? потому что правила перезаписи для файлов из «DocumentRoot» будут немного сложнее. –
Ну да, это технически может быть. Но я хочу разделить мои включенные, корневые и медиа-каталоги на одном уровне. – Villermen