Как я могу перенаправить запросы к определенным файлам выше корня сайта?
Я запускаю новый веб-сайт, и у меня возникают трудности с обеспечением желаемой организации файлов / папок:
Ради аргумента скажем, что мой сайт будет размещен по адресу: http://mywebsite.com/
Я хотел бы (настроил) виртуальный хост Apache для сопоставления http://mywebsite.com/ с папкой /fileserver/mywebsite_com/www.
Проблема возникает, когда я решил, что я хотел бы поместить несколько файлов (favicon.ico и robots.txt) в папку, которая находится над / www, в которую Apache монтирует http://mywebsite.com/ в
robots.txt+favicon.ico go into => /fileserver/files/mywebsite_com/stuff
Поэтому, когда люди переходят на http://mywebsite.com/robots.txt, Apache будет передавать им файл из /fileserver/mywebsite_com/stuff/robots.txt
Я пытался настроить перенаправление через mod_rewrite, но увы:
RewriteRule ^(robots\.txt|favicon\.ico)$ ../stuff/$1 [L]
не принесло мне пользы, потому что в основном я говорил apache, чтобы он обслуживал что-то, что выше его монтированного root.
Можно ли каким-то образом достичь желаемой функциональности, настроив виртуальные хосты Apache (2.2.9) по-другому, или определив RewriteMap некоторого вида, который бы переписывал рассматриваемые URL-адреса не в другие URL-адреса, а вместо этого в пути к системным файлам? Если нет, какой будет предпочтительный курс действий для желаемой организации (если таковая имеется)?
Я знаю, что могу получить доступ к ранее упомянутым файлам через PHP, а затем транслировать их - скажем, с помощью readfile(..), но я бы хотел, чтобы Apache выполнял столько работы, сколько необходимо - он обязательно будет быстрее, чем ввод / вывод через PHP.
Большое спасибо, это уже лишило меня часов конструктивной работы. Не говоря уже о том, что бедный Apache перезапускается каждые несколько минут. Подумайте о бедном Apache:)
2 ответа
Кажется, вы настроены на использование RewriteRule. Тем не менее, я предлагаю вам использовать псевдоним:
Alias /robots.txt /fileserver/files/mywebsite_com/stuff/robots.txt
Кроме того, вам нужно будет сообщить Apache об ограничениях для этого файла. Если у вас есть несколько файлов, обработанных таким образом, сделайте это для полного каталога:
<Directory /fileserver/files/mywebsite_com/stuff>
Order allow,deny
Allow from all
</Directory>
Можете ли вы использовать символические ссылки?
ln -s /fileserver/files/mywebsite_com/stuff/robots.txt /fileserver/files/mywebsite_com/stuff/favicon.ico /fileserver/mywebsite_com/www/
(ln
как cp
, но создает символические ссылки вместо копий с -s
.)