| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Администрирование 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
|
| Автор: 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? попробуй так:
В этом случае необходимо чтобы все папки с поддоменами лежали в директории ~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) ссылку, делаю так (происходит ненужный редирект):
|
| Автор: 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, спасибо за ответ. Вот пример:
Есть домен 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/:
Повидимому что-то делаю не так, прошу помощи! |
| Автор: 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 | ||
Все, пракрасно работает. |
| Автор: Гриша 24.1.2007, 18:49 | ||||
| Mal Hack, спасибо за ответ. Я сделал 2 виртуальных хоста "domain" и "sub.domain", с общим DocumentRoot "E:/home/domain/www" (непонимаю, зачем в таком случае ServerAlias sub.domain domain? - я убрал этот Алиас)
Исходя из описанного выше, 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. Понял как настраивать АЛИАСЫ
Альтернатива этому, делать разные хосты, но с общим DocumentRoot. А у меня были разные хосты, с разным documentroot, поэтому в данном случае mod_rewrite мне никак не мог помочь в решение поставленной задачи. |