imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Веб-мастеру > Веб-программирование
Опции темы
Старый 05.07.2004, 17:40     # 1
Sinker
Junior Member
 
Регистрация: 10.07.2003
Адрес: г. Королев, Россия
Сообщения: 188

Sinker Известность не заставит себя ждатьSinker Известность не заставит себя ждать
ModRewrite? Или как-то еще?

Идея такова.
Есть "рыба" сайта, лежащая на www.site.ru/users/
Есть домены вида www.name.site.ru.
Нужно, чтоб при заходе на www.name.site.ru клиенту выдавался контент из www.site.ru/users/ с параметром n=name, т.е вводит чел в эксплорер www.name.site.ru/index.htm, а ему показывается файл из www.site.ru/users/index.php?n=name. Ну и ссылки чтоб так же прозрачно работали. Вобщем если кто такое уже вытворял - help me please.

ЗЫ. Нарыл вот такой пример: RewriteRule ^([a-zA-Z_0-9]+)\.htm?(.*)$ http://www.site.ru/users/index.php?c=$1&$2 [L]
Т.е. чел нажимает на ссылку www.site.ru/123.htm и его перекидывает на http://www.site.ru/users/index.php?c=123. Но именно перекидывает (как редирект), а нужно чтоб в строке адреса оставался www.site.ru/123.htm, а вот данные брались из другого места.
ЗЗЫ. Надеюсь, внятно растолковал. :-)
Sinker вне форума  
Старый 05.07.2004, 17:57     # 2
Ghost
::VIP::
Звезда первого сезона
Молчун-2004
 
Аватар для Ghost
 
Регистрация: 24.08.2002
Сообщения: 1 575

Ghost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех Гуру
Чтобы ModRewrite не показывал, на что именно происходит редирект, нужно в RewriteRule писать локальные адреса, например
Код:
RewriteRule ^/guest/(.*)$               /sg.pl$1          [NE]
Т.е. в твоем случае, должно быть описано перенаправление:
Код:
RewriteRule ^(.*)\.html$ /index.php?url=$1 [NE]
А скрипт index.php должен сам определять, с какого именно хоста произошло перенаправление, анализируя $ENV{'HTTP_HOST'}. Т.е. в него (скрипт) имя пользователя не передается, а он сам выковыривает его из имени хоста name.site.ru (=~s/(.*)([^\.]+)(\.site\.ru)/$2/).
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы!

Последний раз редактировалось Ghost; 05.07.2004 в 18:32. Причина: склероз...
Ghost вне форума  
Старый 05.07.2004, 19:01     # 3
RaZEr
МОД-Оператор ЭВМ
 
Аватар для RaZEr
 
Регистрация: 18.04.2002
Адрес: Питер
Сообщения: 4 343

RaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех Гуру
Главное чтобы этот Http_host доходил до апача. На шареде это обычно непреодолимое препятствие.
RaZEr вне форума  
Старый 05.07.2004, 19:17     # 4
Sinker
Junior Member
 
Регистрация: 10.07.2003
Адрес: г. Королев, Россия
Сообщения: 188

Sinker Известность не заставит себя ждатьSinker Известность не заставит себя ждать
Ghost
Что-то я ничего не понял (чайник, блин).
2 вопроса.
1. Что значат буквы [L] и [NE]?
2. Попробовал поправить под себя оба твоих примера, но ничего не получается.

Попробую конкретизировать.
Есть "рыба" - 5-10 страниц обычного html. Нужно иметь возможность менять эту "рыбу", чтобы все изменения происходили и на сайтах клиентов (которые www.name.site.ru. они постоены на основе этой рыбы). Различия только в мелких деталях (типа email и телефона), которые и должны подставляться в зависимости от name.
Да, как ты и сказал, есть www.name.site.ru и он прописан как www.site.ru/name.

Сейчас приходится лазить по всей "рыбе" и менять там нужные вещи, после чего заливать её в www.site.ru/name и фактически терять над ней контроль, т.к. таких мини-сайтов на основе этой "рыбы" сделано очень много и во всех что-то менять очень муторно.

Повторюсь:
1. "рыба" в единственном экземпляре лежит где-то на сервере
2. Для посетителей все перенаправление прозрачно, т.е. в строке браузера он видит www.name.site.ru, а не www.site.ru/name
Sinker вне форума  
Старый 05.07.2004, 19:32     # 5
Ghost
::VIP::
Звезда первого сезона
Молчун-2004
 
Аватар для Ghost
 
Регистрация: 24.08.2002
Сообщения: 1 575

Ghost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех Гуру
Если не пройдет $env{'http_host'}, можно анализировать $env{'server_name'} - он также тодержит имя хоста, а именно оно и нужно.

Я так понимаю, что
1. есть сервер site.ru, а все вызовы username.site.ru все равно фактически обращаются к нему (т.е. это как бы дополнительные имеа того же сервера, алиасы).
2. при обращении к username.site.ru/... должно загружаться содержимое /users/username/..., но не простое перенаправление, а на скрипт, который будет выводить страницу.

Настраиваем MOD_Rewrite:
Код:
RewriteRule ^(.*)\.html$ /index.php?url=$1 [NE]
которое будет перенаправлять, например vasja.site.ru/1/a.html на vasja.site.ru/index.php?url=1/a, при этом имя скрипта показываться не будет. Поскольку vasja.site.ru и site.ru это фактически один хост, файл index.php - один для всех и лежит в его корне. В этот скрипт передается параметр url - открываемая страница (обозначим $pagepath). Скрипт смотрит на запрос (ентот самый vasja.site.ru/1/a.html, отобаражаемый в адресоной строке браузера), выковыривает из него имя пользователя, т.е. "vasja" (обозначим $username). Потом скрипт открывает файл "/users/$username/$pagepath.html" (в нашем случае /users/vasja/1/a.html) и выводит его. Кажись, я все правильно понял...

Что обозначает параметр [NE] уже, честно говоря, не помню - выковырял строку из конфига своего сервера.
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы!
Ghost вне форума  
Старый 05.07.2004, 19:58     # 6
RaZEr
МОД-Оператор ЭВМ
 
Аватар для RaZEr
 
Регистрация: 18.04.2002
Адрес: Питер
Сообщения: 4 343

RaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех Гуру
NE - No Escape. В данном случае, думаю, не нужен.
RaZEr вне форума  
Старый 06.07.2004, 13:25     # 7
Sinker
Junior Member
 
Регистрация: 10.07.2003
Адрес: г. Королев, Россия
Сообщения: 188

Sinker Известность не заставит себя ждатьSinker Известность не заставит себя ждать
Ghost
Спасибо. То, что нужно. (ну почти. пришлось доработать напильником :-) )
Вот только еще один вопрос
RewriteRule ^(.*)\.htm$ /users/index.php?url=$1 [NE] передаёт только название файла, а мне нужно в index.php получать еще и name из www.name.site.ru.
Т.е. из http://www.name.site.ru/file.ext передать в http://www.site.ru/users/index.php?file=file&name=name
Просто не силен я в ерегах...

Последний раз редактировалось Sinker; 06.07.2004 в 13:27.
Sinker вне форума  
Старый 06.07.2004, 14:07     # 8
Ghost
::VIP::
Звезда первого сезона
Молчун-2004
 
Аватар для Ghost
 
Регистрация: 24.08.2002
Сообщения: 1 575

Ghost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех Гуру
Sinker
Передавать имя не надо. Его можно выковырять скриптом: сперва получаешь имя хоста из HTTP_HOST:
Код:
my $s = $ENV{'HTTP_HOST'};
потом вычленяешь из него имя юзера:
Код:
$s =~ s/(.+)\.site.ru(.*)/$1/;
$s =~ s/(.*)[\/:\.]([^\.]+)/$2/;
Теперь в переменной $s записано имя пользователя.
Эти примеры я написал для перла; как это будет в PHP не знаю, но, не думаю, что будет сильно отличаться.
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы!
Ghost вне форума  
Старый 06.07.2004, 15:30     # 9
Sinker
Junior Member
 
Регистрация: 10.07.2003
Адрес: г. Королев, Россия
Сообщения: 188

Sinker Известность не заставит себя ждатьSinker Известность не заставит себя ждать
Все. Спасибо. Сделал так:
Код:
RewriteRule ^(.*)\.htm$ /users/index.php?file=$1 [NE] //в .htaccess
Код:
if (preg_match ("/www\.(.*)\.site\.ru/i",$HTTP_X_FORWARDED_HOST,$match))
	{
	    $name=$match[1];
	    include ("$file.htm");
	}
Вроде, работает как надо. Спасибо всем.
Sinker вне форума  
Старый 03.08.2004, 11:23     # 10
Sinker
Junior Member
 
Регистрация: 10.07.2003
Адрес: г. Королев, Россия
Сообщения: 188

Sinker Известность не заставит себя ждатьSinker Известность не заставит себя ждать
Итак, по новой. Все работало, пока сайт не переехал на новый хостинг. И начались проблемы.
На новом месте поддомены лежат выше корня основного домена и такие правила не срабатывают. Т.е. если раньше поддомен www.name.site.ru фактически был папкой www.site.ru/name, то сейчас www.site.ru и www.name.site.ru находятся на одном уровне (а уже внутри них есть свои tmp, cgi-bin и www)
Подскажите, PLZ, как быть в этом случае?
ЗЫ. Если поможет, то хостинг .Masterhost.
Sinker вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 21:36.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.