Я использую .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? Если так, может кто-то указать мне правильное направление?
Я считаю, что вам нужно добавить раздел с
<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 /, и сервер узнает, откуда взять файлы.
Просто чтобы вы знали, почему это правило не работает:
Причина, по которой он не может переписать, /home/other\_files/file.html
заключается в том, что mod_rewrite анализирует путь, так /home/webroot/home/other\_files/file.html
как с точки зрения mod_rewrite предыдущая косая черта эквивалентна корню вашего документа /home/webroot
.
Предложение Райана Ахерна вполне приличное и, скорее всего, тот маршрут, по которому вы хотите идти.
Кредит идет на Райана Ахима, но я собираюсь изложить это. Я новичок, и даже с ответом Райана мне пришлось поэкспериментировать с несколькими вещами, чтобы получить правильный синтаксис.
Я хотел, чтобы мой 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>