Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Администрирование Web серверов и Web служб > Отображение файлов домена из его поддомена


Автор: Гриша 23.1.2007, 19:55
Здравствуйте.

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

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

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

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

C mod_rewrite ничего пока не выходит.
Вариантов пробовал много (один из них):

Настройка .htaccess в http://domain/
RewriteEngine on
Options +FollowSymlinks
RewriteCond %{HTTP_HOST} ^sub\.domain$
RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
RewriteRule ^sub\.domain(.*) /$1$2

Пример отсюда: http://www.4webmaster.ru/articles/usability/14.html


M
Mal Hack
при чем тут PHP???

Автор: Mal Hack 23.1.2007, 19:59
http://forum.vingrad.ru/topic-133499/kw-htaccess-mod-rewrite.html
http://forum.vingrad.ru/topic-133141.html
http://forum.vingrad.ru/topic-133079.html

Автор: AztEK 23.1.2007, 20:00
mod_rewrite здесь не товарищ. Эта проблема обсуждалась в разделе \"Администрирование Web серверов и Web служб\", ищите

Автор: mishaSL 23.1.2007, 20:08
Если проблема только в таблицах стилей и include-ах то прописываешь на <link> полный адрес к домену с таблицами стилей. А там где ltkftim include пишешь обсолютный адрес (что-нибудь вроде /home/user/...)

Или у тебя не получается сделать чтобы поддомен обращался к другой папке?

Автор: Гриша 23.1.2007, 20:37
Поповоду выбора раздела форума, это я спонтанно, был в поиске, нашел там тему схожую, нажал на раздел в котором она размещена и создал в нем эту тему.

Спасибо за ответы.

mishaSL, если я просто делаю перенос папки /catalog/ в поддомен (или просто ее include), у меня получается сделать include() все необходимых файлов,
остается проблема со стилями и картинками, получается что мне необходимо создавать какую-то переменную содержащую URL путь (http://domain/) и подставлять ее во все крипты - вот из-за все этого я задумался о Mod-rewrite, чтобы все это упростить



Mal Hack,
вот пробую пример по первой ссылке:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?.*\.domain$
RewriteRule ^(.*) %{HTTP_HOST}$1

Набираю _http://sub.domain/ (- существующий поддомен и папка sub существует в корне)
Ошибка:
Bad Request
Your browser sent a request that this server could not understand.
Invalid URI in request GET / HTTP/1.1

Набираю _http://sub1.domain/ (sub1 существующая папка в корне _http://domain/sub1/),
результата никакого



По второй ссылке пробую 
RewriteEngine On
RewriteCond %{HTTP_HOST} ^sub.\domain [NC]
RewriteRule ^(.*)    http://domain [P,L]



Третий примерRewriteEngine on   
Options +FollowSymlinks   
RewriteBase / 
RewriteCond %{HTTP_HOST} ^subdomen\.domen\.ru$ 
RewriteCond %{REQUEST_URI} !index.php 
RewriteRule ^(.*)$ /index.php?id=%{HTTP_HOST}&$1 [L] 

Он работает так,
набираю _http://sub.domain/, загружается index.php этого сабдомена,
где $_GET['id'] = 'sub.domain'; и  $_GET['sub'] = '';

Попробовал заменить последнюю строчку на 
RewriteRule ^(.*)$ http://domain/ [L]
Происходит простой редирект с домена на поддомен


Подскажите пожалуйста возможно ли реализовать, то что я спрашиваю или нет?
Просто переносить например папку /catalog/ из http://domain/ в http://sub.domain/,
получаетется что изображения и стили тоже грузятся из http://sub.domain/, а надо чтобы из http://domain/,
т.е. получается что остается вариант при котором мне вручную нужно будет прописывать путь для изображений и css,
а это уже какой-то каламбур.



Автор: mishaSL 23.1.2007, 21:00
Конечно можешь прописать тег <base>, но тогда придется поменять все ссылки на абсолютные. 

Можно дальше поиграться с mod-rewrite? попробуй так:
Код

RewriteEngine On

Options +FollowSymLinks +SymLinksIfOwnerMatch

RewriteCond   %{HTTP_HOST}  ^(www.)?(.*)\.domen$
RewriteCond   %{DOCUMENT_ROOT}/~subdomen/%2 -d
RewriteCond %{REQUEST_URI} !^/~subdomen(.*)
RewriteCond %{REQUEST_URI} !^/images(.*)
RewriteCond %{REQUEST_URI} !^/styles(.*)
RewriteRule   (.*) ~subdomen/%2/$1 [L,QSA]



В этом случае необходимо чтобы все папки с поддоменами лежали в директории ~subdomen и назывались по имени поддомена (к примеру subsite1.site1.ru его директория располагается в /~subdomen/subsite1)
Картинки в папке images, а стили в папке styles.


Автор: Гриша 23.1.2007, 21:50
mishaSL, спасибо за ответ.

Кладу в .htaccess в http://domain/

Я непонял почему есть необходимость именно в папке ~subdomen,
я попробовал так:
Содержимое http://sub.domain/ находится в http://domain/sub/

RewriteEngine On

Options +FollowSymLinks +SymLinksIfOwnerMatch

RewriteCond   %{HTTP_HOST}  ^(www.)?(.*)\.domen$
RewriteCond   %{DOCUMENT_ROOT}/%2 -d
RewriteCond %{REQUEST_URI} !^/(.*)
RewriteCond %{REQUEST_URI} !^/images(.*)
RewriteCond %{REQUEST_URI} !^/styles(.*)
RewriteRule   (.*) %2/$1 [L,QSA]

Непроисходит вообще ничего.
Столько примеров перебробовал, но ничего не работает.

Автор: Mal Hack 23.1.2007, 22:15
Гриша, ознакомься с теми ссылками, что я привел. В одной из тем как раз делается то, что тебе нужно.

Автор: Гриша 23.1.2007, 23:51
Mal Hack, попробую еще раз с ними разобраться, но вообще те примеры которые там описаны как работающие у меня не работают, я описал все варианты, ну буду разбираться еще.

Добавлено @ 00:05 
Mal Hack, закончил попробовать все из приведенных ссылок, результата никакого.
Если вы знает где в ссылках приведен подходящий пример под мои услговия, если вы можете показать мне где именно этот пример, если этого не запрещают правила форума, пожалуйста покажите.
Возможно я туплю и в правильном примере что-то делаю не так.

Вот беру последнюю (3) ссылку, делаю так (происходит ненужный редирект):
Код

RewriteEngine on   
Options +FollowSymlinks   
RewriteBase / 
RewriteCond %{HTTP_HOST} ^sub\.domain$ 
RewriteCond %{REQUEST_URI} !index.php 
#RewriteRule ^(.*)$ /index.php?id=%{HTTP_HOST}&$1 [L]
RewriteRule ^(.*)$ http://domain/ [L]



Автор: Mal Hack 24.1.2007, 00:56
Гриша, http://forum.vingrad.ru/topic-133499/kw-htaccess-mod-rewrite.html

Автор: Гриша 24.1.2007, 01:18
Mal Hack, спасибо за ответ.

Вот пример:
Код

RewriteEngine On

Options +FollowSymLinks +SymLinksIfOwnerMatch

RewriteCond   %{HTTP_HOST}  ^(www.)?(.*)\.domen\.ru$
RewriteCond   %{DOCUMENT_ROOT}/~subdomen/%2 -d
RewriteCond %{REQUEST_URI} !^/~subdomen(.*)
RewriteRule   (.*) ~subdomen/%2/$1 [L,QSA]


Есть домен http://domain/ - DOCUMENT_ROOT = e:/home/domain/www/
Есть поддомен http://sub.domain/ - DOCUMENT_ROOT = e:/home/domain/www/sub/

Задача: при запросе http://sub.domain/catalog/ загржать данные из http://domain/catalog/ (DOCUMENT_ROOT = e:/home/domain/www/catalog/ - это просто каталог, НЕ каталог поддомена)


Используя приведенный выше пример, пытаюсь хотябы сделать так, чтобы при запросе http://sub.domain/ загружалисб данные из http://domain/:
Код

RewriteEngine On

Options +FollowSymLinks +SymLinksIfOwnerMatch

RewriteCond   %{HTTP_HOST}  ^sub\.domain$
RewriteCond   %{DOCUMENT_ROOT}/magazin -d
RewriteCond %{REQUEST_URI} !^(.*)
RewriteRule   (.*) /$1 [L,QSA]


Повидимому что-то делаю не так, прошу помощи!

Автор: Mal Hack 24.1.2007, 01:21
Гриша, ты пытаешься привязаться к основному домену, а сделать этого нельзя. Ты должен к папкам привязываться!!!

RewriteCond   %{HTTP_HOST}  sub\.domain
RewriteRule ^.*$ /sub/index.php

При этом, домен и сабдомен должны быть настроены в Апаче на ОДНУ папку.

Автор: Гриша 24.1.2007, 01:38
Mal Hack, спасибо за быстрый ответ.

У меня и так пробле с mow_rewrite,
но щас я уже очумеваю от всего этого, я и логи просматриваю, и документациюю перечитываю и примеры разбираю, 
ну никак я непойму что ни так.

Беру просто ваш пример, для домена и поддомена делаю один DOCUMENT_ROOT = e:/home/domain/www/

набираю http://sub.domain/ открывается http://domain/,
а я ожидал что откроется /sub/index.php - индексный файл для поддомена.

Я в полном ступоре, я просто вообще непойму что делать, возможно это или нет

Автор: Mal Hack 24.1.2007, 01:42
На сервере ты можешь это на туровне Апача раскидать по разным папкам?
Вот там и сделай...
Что касается косяков на локале, то тут претензии к настройке виртуальных хостов...
Сабдомен должен быть через ServerAlias настроен.

Автор: Гриша 24.1.2007, 01:45
Спасибо большое за ответ.

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

Автор: Гриша 24.1.2007, 02:51
Добавил для виртуального хоста sub.domain
ServerAlias sub.domain domain

Теперь беру пример:
RewriteCond   %{HTTP_HOST}  sub\.domain
RewriteRule ^.*$ /sub/index.php

Не работает (Internal Server Error)



Автор: Mal Hack 24.1.2007, 16:08
Код
Options +FollowSymlinks -MultiViews
RewriteCond %{HTTP_HOST} ^scripts.localhost$
RewriteRule ^.*$ index.php?par=%{HTTP_HOST} [L]

Все, пракрасно работает.

Автор: Гриша 24.1.2007, 18:49
Mal Hack, спасибо за ответ.

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

Код

Options +FollowSymlinks 
#-MultiViews - незнаю почему отключен этот параметр, я его убрал?
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 ошибка.

Теперь буду стараться составить все эти проверки, на мысоль вы меня навелие, теперь хоть как-то получается, спасибо 
Mal Hack.


Понял как настраивать АЛИАСЫ
Код

#---- domain 24.01.2007
<VirtualHost domain>
  ServerName domain
  ServerAlias domain *.domain
  #24.01.2007 - Алиас для все поддоменов, каждый поддомен прописывается для этогоже IP в C:/WINDOWS/...hosts
  ...
</VirtualHost>


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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)