Мод-перезапись загрузки файлов за DocumentRoot

Я использую .htaccessи, mod_rewriteчтобы указать на файлы, которые находятся за DocumentRoot. Моя структура папок выглядит так:

home/
    webroot/
    other_files/

У меня есть .htaccessфайл в webroot со следующим содержанием:

ПереписатьEngine на
RewriteRule ^ (. *) $ / Home / other_files / $ 1

Если я пытаюсь получить доступ к http://example.com/file.html, я получаю следующую ошибку:

Запрашиваемый URL /home/other_files/file.html не был найден на этом сервере.

Можно ли даже загрузить файлы, которые находятся за DocumentRoot? Если так, может кто-то указать мне правильное направление?

12.08.2008 03:58:21
3 ОТВЕТА
РЕШЕНИЕ

Я считаю, что вам нужно добавить раздел с

<Directory "/home/other_files">
  (options)
</Directory>

до конфигурации вашего сервера, прежде чем Apache сможет обслуживать все, что от него. Например, мой DocumentRoot - это / var / www, но на доступном по умолчанию сайте есть этот раздел:

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>

Затем вы можете переписать URL-адрес, чтобы перейти в / doc /, и сервер узнает, откуда взять файлы.

13
12.08.2008 04:21:54
Я попытался создать псевдоним в каталоге вне DocumentRoot без раздела <Directory>, и это сработало ...
Pere 14.05.2014 21:20:08

Просто чтобы вы знали, почему это правило не работает:

Причина, по которой он не может переписать, /home/other\_files/file.htmlзаключается в том, что mod_rewrite анализирует путь, так /home/webroot/home/other\_files/file.htmlкак с точки зрения mod_rewrite предыдущая косая черта эквивалентна корню вашего документа /home/webroot.

Предложение Райана Ахерна вполне приличное и, скорее всего, тот маршрут, по которому вы хотите идти.

0
23.05.2017 12:19:33

Кредит идет на Райана Ахима, но я собираюсь изложить это. Я новичок, и даже с ответом Райана мне пришлось поэкспериментировать с несколькими вещами, чтобы получить правильный синтаксис.

Я хотел, чтобы мой DocumentRoot был моим каталогом cakephp. Но потом у меня был Mantis Bug tracker, который был просто обычным php и поэтому не был в каталоге cakephp. В файлах ниже у меня есть следующие рабочие.

http://www.my_website.com : обслуживается / var / www / cakephp

http://www.my_website.com/mantisbt : обслуживается / var / www / html / mantisbt

Файл /etc/httpd/conf/httpd.conf

Alias /mantisbt/ "/var/www/html/mantisbt/"                                                                          
<Directory "/var/www/html/">                                                                                        
    AllowOverride All                                                                                               
</Directory>                                                                                                        

<VirtualHost *:80>                                                                                                  
    ServerAdmin me@my_email.com                                                                             
    DocumentRoot /var/www/cakephp                                                                                   
    ServerName my_website.com                                                                                      
    <Directory /var/www/cakephp/>                                                                                   
        AllowOverride All                                                                                           
    </Directory>                                                                                                    
</VirtualHost>

Файл /var/www/cakephp/.htaccess

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule    ^mantisbt/?$   /mantisbt/  [NC,L]
    RewriteRule    ^$    webroot/    [L]
    RewriteRule    (.*) webroot/$1    [L]
</IfModule>
0
12.09.2015 02:43:39