Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Несколько точек входа на сайт 
:(
    Опции темы
BuShaRt
Дата 21.5.2013, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: нет
Всего: 6



Есть сайт, на пример example.com (пусть на сервере он лежит в каталоге /home/user/sites/example/)
Мы делаем сайт спутник, по адресу satellite.example.com (пусть на сервере он лежит в каталоге /home/user/sites/satellite/)

Теперь задача реализовать возможность захода на сайт спутник по следующим ссылкам, одновременно, без копирования и перемещения проекта. Важно! Точки входа не должны визуально изменяться т.е. банально средиректить не получиться.
satellite.example.com
example.com/satellite 

Изначально задача мне показалась пустяковой. Я планировал повесить на satellite mod_rewrite на поддомен, но как оказалось mod_rewrite не может сделать невидимый ридерект на прямую ссылку (т.е. в строке браузера видно, что произошел ридерект). Промучался пол дня - идей много, но из-за скудного понимания мад. части реализую медленно и возможно криво.

Есть у кого-нибудь идеи?
PM MAIL   Вверх
Arantir
Дата 21.5.2013, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 1
Всего: 55



1. Засунуть в /home/user/sites/example/ символическую ссылку с именем "satellite" на папку /home/user/sites/satellite/.
Сервер при заходе на example.com/satellite  будет выдавать сайт из /home/user/sites/satellite/.

2. Использовать mod_alias
Код

Alias /satellite /home/user/sites/satellite/





--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
BuShaRt
Дата 22.5.2013, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: нет
Всего: 6



Arantir, Огромное спасибо, оба вариант проверил и оба отлично отработали!
PM MAIL   Вверх
ksnk
Дата 22.5.2013, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 5
Всего: 386



BuShaRt, C символическими ссылками можно попасть и на неприятности, если используется $_SERVER['DOCUMENT_ROOT']. 
Его довольно часто используют для вычисления "относительного" пути до файла, чтобы сформировать URI ссылку. При символических ссылках эти вычисления расползаются.



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
BuShaRt
Дата 23.5.2013, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: нет
Всего: 6



ksnk, Вот как раз столкнулись с этой проблемой, причем для Mod Alias она тоже актуальна.
PM MAIL   Вверх
Arantir
Дата 23.5.2013, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 1
Всего: 55



Цитата(BuShaRt @  23.5.2013,  13:40 Найти цитируемый пост)
причем для Mod Alias она тоже актуальна

Ну проблема не в ссылках и в моде, а в самом $_SERVER['DOCUMENT_ROOT']. Когда сайт писался с его использованием, то, судя по всему, этот сайт не предполагался как сателитный. 
Да и вообще использование таких абсолютных значений не рекомендуется.

В самом простом случае $_SERVER['DOCUMENT_ROOT'] можно просто заменить на 
Код

realpath(__DIR__)
// или, если нужно
realpath(__DIR__.'/../') // папка выше текущей

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

Это сообщение отредактировал(а) Arantir - 23.5.2013, 14:58


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
ksnk
Дата 23.5.2013, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 5
Всего: 386



Цитата(BuShaRt @  21.5.2013,  17:12 Найти цитируемый пост)
Теперь задача реализовать возможность захода на сайт спутник по следующим ссылкам, одновременно, без копирования и перемещения проекта. 

Не зная деталей можно только фантазировать на подобные темы  smile 

То есть ссылка в случае  satellite.example.com будет /uploaded/document.docx, а в случае
eample.com/satellite - /satellite/uploaded/document.docx ?

Откуда берется ссылка на документ? Из базы? В базе, вероятно лежит что-то вроде uploaded/document.docx?

"Типичный" код, который обеспечивает формирование адресов безотносительно месторасположения сайта выглядит как-то так
index.php
Код

<?php
define('ROOT_PATH',$_SERVER['DOCUMENT_ROOT']);
define('ROOT_URI',str_replace(ROOT_PATH,'',str_replace('\\','/',__DIR__)));

Ну и пара функций, которая готовит для базы имена загруженных файлов и формирует URI адреса по выкачанным из базы ссылкам.
Код

function filename2basename($filename){
   return str_replace(ROOT_PATH.ROOT_URI,'',str_replace('\\','/',$filename));
}

function basename2URI($base_name){
   return ROOT_URI.$base_name;
}


Ошибка этого кода, при использовании modeAliace будет в том, что DOCUMENT_ROOT считается "верхней частью" собственного пути. 
В общем случае нужно будет иметь какой-то массив с map'ами каталогов файловой системы на uri сервера.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Администрирование Web серверов и Web служб | Следующая тема »


 




[ Время генерации скрипта: 0.0476 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.