привязка физического файла или каталога к урлу

Kerrygun

Новичок
привязка физического файла или каталога к урлу

Как можно реализовать привязку реальных файлов и директорий к адресу в урле?

Т.е. скажем, адрес файла в урле должен быть http://kerrygun.ru/test.txt
а физически относительно корня test.txt лежит, к примеру в files/texts/test.txt

Или, например, хочу я по адресу http://kerrygun.ru/forum/ - сделать, как это ни странно, форум. А физически, относительно корня сайта он у меня находится в files/scripts/forum/

Как вариант решения - можно воспользоваться mod_rewrite, но переписывать его каждый раз как возникнет необходимость - совсем не хочется. А хочется веб-админку и базу данных.

Есть идеи?
 

moxnatiy

Новичок
DOCUMENT_ROOT определить в files и пути подправить
иначе вопрос не имеет смысла
 

440hz

php.ru
Re: привязка физического файла или каталога к урлу

[skip] сорри ... не то сказал.
 

Kerrygun

Новичок
Автор оригинала: Фанат
Kerrygun
можно спросить - а зачем?
Можно.
Делаю движок на mod_rewrite + mysql. Всё в принципе уже работает, осталась одна загвоздка. Фишка в том что физически один движок обеспечивает работу нескольких сайтов. Т.е. в зависимости от запрошеного адреса - выдает контент соответствующего сайта. Файлы соответствуюшие разным сайтам лежат в директориях типа system/sites/site1.ru , system/sites/site2.ru и т.п. Если я хочу выложить что то на одном из сайтов - получается длинный урл, что-то вроде http://site1.ru/system/sites/site1.ru/files/file.txt
а это не очень красиво, хотелось бы "system/sites/site1.ru" из урла удалить...

Теперь понятно зачем?
 

Фанат

oncle terrible
Команда форума
Если бы я делал так, то всем этим сайтам я бы сделал один документ рут, и уже в скриптах, по HTTP_HOST определял - куда мы попали.
то есть, DocumentRoot в описании виртуального сервера - это и есть та самая привязка урла к каталогу. только глобальная
 

Kerrygun

Новичок
ВО! пришла в голову мысль: а нельзя ли прописать соответствующее правило для mod_rewrite...
сейчас оно работает так:
если файл или директория не найдены - запрашиваемый урл отдается как параметр index.php?url=<запрашиваемый урл>

а нельзя ли сделать так:
если файл или директория не найдены -
- поискать этот файл по адресу system/sites/<запрашиваемый сайт>/<запрашиваемый адрес>, если и здесь файл не найден - запрашиваемый урл отдается как параметр index.php?url=<запрашиваемый урл>

ы?
 

kvf77

Red Devil
Kerrygun

я то-то не пойму, если пользователь зашел на "Танчики" и ввел не правильный путь, ты хочешь проверить, а может он на "Девочки" шел? что за бред?
 

Kerrygun

Новичок
Автор оригинала: Фанат
Если бы я делал так, то всем этим сайтам я бы сделал один документ рут, и уже в скриптах, по HTTP_HOST определял - куда мы попали.
то есть, DocumentRoot в описании виртуального сервера - это и есть та самая привязка урла к каталогу. только глобальная
Проблема в том, что все DocumentRoot в описании виртуальных серверов - указывает всегда на один и тот же каталог. Все сайты работают на _ФИЗИЧЕСКИ_ОДНОМ_ДВИЖКЕ_
Это такая фишка - можно один раз прописать в апаче на любые запросы отдавать один и тот же DocumentRoot, и если потребуется хостить ещё один сайт - не придется переписывать httpd.conf и перегружать апач.
 

Фанат

oncle terrible
Команда форума
ну и прекрасно.
тогда я не понял, какая у тебя проблема.
 

Kerrygun

Новичок
Автор оригинала: kvf77
Kerrygun

я то-то не пойму, если пользователь зашел на "Танчики" и ввел не правильный путь, ты хочешь проверить, а может он на "Девочки" шел? что за бред?
Что-то вроде. Объясняю на примере:
file.txt лежит в http://site1.ru/system/sites/site1.ru/files/file.txt - ссылка некрасивая, согласитесь.

вместо того чтобы давать эту ссылку - я хочу чтоб срабатывала ссылка
http://site1.ru/files/file.txt

для этого я хочу чтоб для mod_rewrite было прописано правило:
если файла files/file.txt не существует (а его точно не существует) - проверить, сущсуществует ли файл по адресу system/sites/<запрашиваемый сайт>/files/file.txt
если существует - выдать его, если нет - отдавать требуемый урл index.php

Вот так вот. Вот я и спрашиваю - возможно ли сделать это для на mod_rewrite ? Если да - то как? :)
Если нет - то как это сделать? :))
 

Фанат

oncle terrible
Команда форума
как-то странно у тебя лежит файл.
почему бы ему не лежать в
http://sites.ru/files/file.txt ?
 

Kerrygun

Новичок
Автор оригинала: Фанат
как-то странно у тебя лежит файл.
почему бы ему не лежать в
http://sites.ru/files/file.txt ?
а как мне разграничить файлы от разных сайтов? создавать виртуальную файловую систему, а сами файлы кидать в одну кучу? Если захочу поставить какойнить форум на один из сайтов - как быть?
 

clevel

Новичок
странная структура каталогов.. У меня сделано так:
папка с движком лежит в директории,например /cms/
все виртуальные хостылежат по папкам /hosting/host1/, hosting/host2/ для каждого свои каталоги html, logs, tmp
в настрйоках пхп стоит include_dir на папку с движком...апач каждый хост под своим юзером/группой запускает, safe_mode и все шоколадно..
 

alexon

Новичок
В .htaccess:
PHP:
RewriteRule ^(.*)$ /kernel.php?__u=/$1&__s=%{HTTP_HOST} [PT,QSA]
В коде:
PHP:
$host=$_GET['__s'];
$uri=$_GET['__u'];
Далее сопоставляешь $host с папкой где лежат файлы, если данные лежат в файлах, а не в базе, например:
PHP:
if ($host=='site1.ru') {
    $path='/system/site1/files';
} else if (...) {
    ...
}
...
$buffer=file_get_contents($path.$uri);
...
echo $buffer;
Если данные в базе - то просто ищешь ресурс по URI и вытаскиваешь данные.

Принцип, надеюсь, понятен.
 

texrdcom

Новичок
я делал коечто похожое - через мод rewrite все запроссы идут на index.php а в нем через разбор запроса подключаеться любой нужный документ - это так в общем а вообще для таких целей написал ядро универсальное которое и занимаеться такими вещими а в настройках (файл ини выставляеш начальны настройки)
 
Сверху