2010-03-09 4 views
0

У меня есть веб-приложение, в котором есть один набор файлов, используемых 50+ клиентами, и вся конфигурация для каждого сайта происходит из файла config.php в соответствующих каталогах. Это достигается с помощью PHP-анализа URL. Все это прекрасно работает, просто возникли проблемы с пользовательскими закачано документами клиент может сделать и расположены вApache Rewrite: каталог дерева для каталога поддоменов

/вар/WWW/сайтов/user1/кэш

Там может быть несколько подкаталогов. Поэтому при запросе http://user1.site.com/cache/subdir1/image.jpg он должен быть считан из /var/www/sites/user1/cache/subdir1/image.jpg

клиенту разрешено загружать файлы любого типа, так что мне просто нужно переписать принимать любые запросы/кеширования, затем захватывать субдомен и указывать на соответствующий каталог.

Придумал, но я все еще получаю недопустимый страницу

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^([^\.]+)\.site\.com$ 
RewriteRule ^cache/(.*)$ /sites/%1/cache/$1 [L] 

Любая помощь приветствуется.

ответ

0

Параметр/вар/WWW/где файлы находятся в файловой системе. Я направлялся на основе корневого документа, поэтому мне не нужно было его там указывать. Но я понял, что мне не хватает ведущей косой черты в/cache /. Хотя ваш ответ не был тем, что я искал, он заставил меня понять, чего я не вижу. Благодарю.

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^([^\.]+)\.site\.com$ 
RewriteRule ^/cache/(.*)$ /sites/%1/cache/$1 [L] 
0

Если я правильно прочитал the RewriteRule documentation, сам флаг L создаст внутреннее перенаправление, что означает, что подстановка будет интерпретироваться как путь к локальной файловой системе.

Попробуйте использовать полный путь:

RewriteRule ^cache/(.*)$ /var/www/sites/%1/cache/$1 [L]

или сделать внешний переназначение (с использованием HTTP возврата статуса «302 Перенесено ВРЕМЕННО»), чтобы браузер пользователя повторно отправить запрос с новый путь:

RewriteRule ^cache/(.*)$ /sites/%1/cache/$1 [L,R]

Смежные вопросы