Отображение файлов домена из его поддомена: http://dom/dir/ => http://sub.dom/dir/ ?

Гриша К.

Новичок
Отображение файлов домена из его поддомена: http://dom/dir/ => http://sub.dom/dir/ ?

Здравствуйте.

Например есть сайт _http://domain/, имеющий следующую файловую структуру:
/catalog/
/cart/
/text/

Есть задача, вынести некоторые разделы сайта в поддомен,
например /catalog/ в _http://sub.domain/catalog/,
или такой вариант: при наборе _http://sub.domain/catalog/ на самом деле загружалиьс данные из _http://domain/catalog/

Все страницы сайта имеют некоторые общие подключаемые скрипты и таблицы стилей,
поэтому например при простом переносе /catalog/ из _http://domain/ в _http://sub.domain/,
возникают проблемы с подключением общих скриптов и таблиц стилей содержащихся в _http://domain/

C mod_rewrite ничего пока не выходит.

Подскажите пожалуйста варианты решения, при котром требуемые файлы и директории домена, были доступны из поддомена?

P.S. Когда похожую задачу я решал с помощью include(), но я думаю что это не вариант.
 

Kindzoku

Новичок
А как вариант - в корневом конфигурационном файле прописать некую константу, в которой будет содержаться физический путь к поддомену? Соответственно эту константу потом можно будет прибавлять ко всем адресам.(Этот вариант для: "/catalog/ в _http://sub.domain/catalog/")
А для "при наборе _http://sub.domain/catalog/ на самом деле загружалиьс данные из _http://domain/catalog/" - посмотри документацию Апача по mod_rewrite, на сколько я помню - там эта задача решается достаточно просто, условиями.
 

Гриша К.

Новичок
Kindzoku, спасибо за ответ.
По поводу первого варианта, я понял вас, но этот вариант мне не нравится, в таком случае нужно подправлять все скрипты, шаблоны - нет, надеюсь найти вариант по проще.

По поводу вариантов с mod_rewrtie,
читаю документацию: http://www.opennet.ru/docs/RUS/mod_rewrite/index.html#rewritebase.
Наприер пробую сделать доступным все файлы домена из его поддомена:
PHP:
RewriteEngine on
Options +FollowSymlinks
RewriteCond  %{HTTP_HOST}  ^sub.domain
RewriteRule ^(.*)$ _http://domain/ [L]
Происходит простой редирект.
Сколько вариантов я не пробовал, лиюбо редирект, либо ничего.
 

Kindzoku

Новичок
Я сначала не совсем правильно понял вопрос.
Боюсь, что с Апачем ничего так не получится. Лучше спросить у кого то ещё. Но вообще, я обычно использую константы, что делает коды более транспортабельными.
 

Гриша К.

Новичок
Kindzoku, спасибо за ответ.

К примеру я хочу сделать доступным файл _http://domain/index.php из поддомена _http://sub.domain/index.php

Для этого из корневой папки домена (www), копирую в папку поддомена (www/sub) файл index.php,
$_SERVER['DOCUMENT_ROOT'] в скопированном index.php делаю /www, в таком случае подключаемые скрипты через include подключаются верно.

Но например, у меня есть изображения на этой странице , путь в шаблоне к ним такой $_SERVER['SCRIPT_NAME'].'images/', в итоге путь получается _http://domain/images (когда на самом деле нужно, чтобы было _http://sub.domain/images),
а для ссылок путь должен оставаться новым (_http://sub.domain/).
 

Kindzoku

Новичок
Просто мне по жизни ModRewrite нужен был только для очищения адресной строки от GET параметров!:)
 

Гриша К.

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

Вот можно ли как-то сделать, чтобы при запросе _http://sub.domain/images/,
на самом деле загружались данные из _http://sub.domain/images/ ???
 

Гриша К.

Новичок
Vallar_ultra, спасибо за ответ.
Смотрю пример 3, делаю по примеру:
не создавая поддомена http://sub.domain/

RewriteEngine on
Options +FollowSymlinks
RewriteCond %{HTTP_HOST} ^[^.]+\.domain$
RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
RewriteRule ^([^.]+)\.domain(.*) /$1$2

#Оригинальный пример
RewriteCond %{HTTP_HOST} ^www\.[^.]+\.website\.net$
RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
RewriteRule ^www\.([^.]+)\.website\.net(.*) /$1$2
От данного примера ожидаю, что набрав http://sub.domain/,
будет загружена страница из http://domain/sub/ (которая существует, но для данного примера директория sub неопределена корневой директорией для поддомена)
Результата никакого (Невозможно отобразить страницу).

Я пробую примеры и при существуещем поддомене и нет, результат ошибки 404, 500, редирект на основной домен.

-~{}~ 23.01.07 16:20:

Вот еще пример: http://www.1gb.com.ua/default.aspx?ti=6&hti=84
Результата опятьже никакого

Вообще кто-то пробовал реализовать подобное, возможно ли такое, существуют ли работающие примеры,
потому что я уже и излазил по gogole, yandex по запросу Поддомены mod_rewrite, те примеры которые я назодил, не один не работает?
 

aXis

Новичок
Гриша К

Возможно. сам недавно сталкивался с такой задачей
- редирект с НЕсуществующего поддомена на домен
и решил вроде.
Куда то посеял, ищу. :(
но по памяти скажу так
1) в днс должна быть нужная запись. В винде днс это файл hosts. Причем я не знаю как описать в нем сразу все поддомены. мне надо было для денвера и я прописал явно а потом и вовсе убрал. он сам в курсе
2) нужно на виртуал хост при создании указать стррку
ServerAlias \"*.domain.ru\" \"www.*.domain.ru\"
Он заставит прыгнуть с поддоменов на домен
3) ну а дальше уже хтакесс - mor_rewrite
он разрулит в нужную папку
 

Гриша К.

Новичок
aXis, спасибо за ответ.

Поддомен у меня существующий, т.е. набирая _http://sub.domain/, загружается индексная страница для домена (/root/www/sub) (для _http://domain/ - /root/www/).

Мне нужно чтобы при наборе существующего поддомена, _http://sub.domain/catalog/ открывалось сродержимое _http://domain/catalog/


Я так понимаю что в таком случае мне ненужно в httpd.conf делать ServerAlias.

Мне либо mor_rewrite, либо простое копирование нужных данных в папку /root/www/sub/ с подправкой путей - чего делать не хотелось бы, но повидимому варианта с mod_rewrite нету.
 

Гриша К.

Новичок
baev, спасибо за ответ.
Добавил для виртуального хоста _http://domain/
ServerAlias sub.domain domain

Получается, что при наборе sub.domain открывается виртуальный хост localhost - 127.0.0.1,
для sub.domain установлено 127.0.0.11.
Каким-то таким образом мне нужно сделать алиас именно для domain

=====================
Добавил для виртуального хоста_http://sub.domain/
ServerAlias sub.domain domain

Пробую примеры, результат тот же, за исключением тго, что если при некотрых примарх ничего не было, то теперь браузером выдается 500 ошибка
 

aXis

Новичок
Гриша К.
Существование поддомена означает то что сервер направит запрос именно туда.

В случае же с алиасами сервер направляет все подддомены в домен. Если конечно это правило не перебивают другие.

В любом случае тебе нужен мод_реврайт.
Тут уже давали правильный вариант.


Заморочка с алиасами нужна только тогда когда поддомена нет и сервак выдает ошибку. Это как я понимаю не твой случай.

Поэтому мучай мод_реврайт пока не заработает. И не забывай, что если ты мучаешь денвер то в винде не пашет ограничения на количество редиректов.
 

Гриша К.

Новичок
aXis, спасибо за ответ.

Я сделал 2 виртуальных хоста "domain" и "sub.domain", с общим DocumentRoot "E:/home/domain/www"
(ServerAlias sub.domain domain? для хоста "sub.domain" ничего не дает, всеравно нужно указывать ServerName и DoucmentRoot)

PHP:
Options +FollowSymlinks 
RewriteCond %{HTTP_HOST} ^sub.domain$
RewriteCond %{REQUEST_URI} !^/images(.*) #Чтобы изображения брались из _http://doamin/images/
RewriteCond %{REQUEST_URI} !^/css(.*) #Чтобы css брались из _http://doamin/css/
RewriteRule ^.*$ sub/index.php [L]
Исходя из описанного выше, mod_rewrite необходим для того, чтобы:
1) при загрузке главной страницы поддомена _http://sub.doamin/ загружалась страница из _http://doamin/sub/index.php
2) так как мне нужно чтобы к папке "E:/home/domain/www/catalog" имел доступ только поддомен _http://sub.doamin/catalog/,
то для данной директории делаю проверку на соответсвии хоста = "sub.doamin", в противном случае редирект на страницу с ощибкой 404.
Ну и соответсвенно в итоге для каждого хоста разрешаю свои папки, в остальных случаях 404 ошибка.

Теперь буду стараться составить все эти проверки. Но теперь для меня что-то прояснилось и что-то получается, благодаря тому что мне дали совет (не здесь) по определению общего documentroot для домена и сабдомена
(Я так понимаю что поддомен в виде алиас для домена, это тоже самое что общий documentroot, но что-то с алисасом неполучается).

Понял как настраивать АЛИАСЫ
PHP:
#---- domain 24.01.2007
<VirtualHost domain>
  ServerName domain
  ServerAlias domain *.domain
  #24.01.2007 - Алиас для все поддоменов, каждый поддомен прописывается для этогоже IP в C:/WINDOWS/...hosts
  ...
</VirtualHost>
Альтернатива этому, делать разные хосты, но с общим DocumentRoot.
А у меня были разные хосты, с разным documentroot, поэтому в данном случае mod_rewrite мне никак не мог помочь в решение поставленной задачи.
 

aXis

Новичок
О чудо. я нашел источник.
http://community.livejournal.com/ru_webdev/589997.html?thread=5978797#t5978797

сразу-
1)только для локалки днс это хостс.
2) на денвере такое построить лучше не пытайся.
3)на локалке невозможно прописать днс сразу на все
4) редиректлимит для винды не пашет
5) редиректить должно туда где хтаксесс. контент в подпапках

я юзал это как пример и оно у меня запахало после танцев с бубном. вот только куда я его дел не пойму.

-~{}~ 24.01.07 22:28:

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

Гриша К.

Новичок
aXis, спасибо за ссылку и разъяснения.
Я уже успел с этим разобраться сегодня днем, наконец-то все работает и понятно как.
 

aXis

Новичок
ну так напиши сюда как. мне же тоже позже разбираться.
 
Сверху