imho.ws |
![]() |
![]() |
![]() |
# 1 |
Junior Member
Регистрация: 10.07.2003
Адрес: г. Королев, Россия
Сообщения: 188
![]() ![]() |
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, а вот данные брались из другого места. ЗЗЫ. Надеюсь, внятно растолковал. :-) |
![]() |
![]() |
# 2 |
::VIP::
Звезда первого сезона Молчун-2004 Регистрация: 24.08.2002
Сообщения: 1 575
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Чтобы ModRewrite не показывал, на что именно происходит редирект, нужно в RewriteRule писать локальные адреса, например
Код:
RewriteRule ^/guest/(.*)$ /sg.pl$1 [NE] Код:
RewriteRule ^(.*)\.html$ /index.php?url=$1 [NE]
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы! Последний раз редактировалось Ghost; 05.07.2004 в 18:32. Причина: склероз... |
![]() |
![]() |
# 4 |
Junior Member
Регистрация: 10.07.2003
Адрес: г. Королев, Россия
Сообщения: 188
![]() ![]() |
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 |
![]() |
![]() |
# 5 |
::VIP::
Звезда первого сезона Молчун-2004 Регистрация: 24.08.2002
Сообщения: 1 575
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Если не пройдет $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] Что обозначает параметр [NE] уже, честно говоря, не помню - выковырял строку из конфига своего сервера.
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы! |
![]() |
![]() |
# 7 |
Junior Member
Регистрация: 10.07.2003
Адрес: г. Королев, Россия
Сообщения: 188
![]() ![]() |
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. |
![]() |
![]() |
# 8 |
::VIP::
Звезда первого сезона Молчун-2004 Регистрация: 24.08.2002
Сообщения: 1 575
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Sinker
Передавать имя не надо. Его можно выковырять скриптом: сперва получаешь имя хоста из HTTP_HOST: Код:
my $s = $ENV{'HTTP_HOST'}; Код:
$s =~ s/(.+)\.site.ru(.*)/$1/; $s =~ s/(.*)[\/:\.]([^\.]+)/$2/; Эти примеры я написал для перла; как это будет в PHP не знаю, но, не думаю, что будет сильно отличаться.
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы! |
![]() |
![]() |
# 9 |
Junior Member
Регистрация: 10.07.2003
Адрес: г. Королев, Россия
Сообщения: 188
![]() ![]() |
Все. Спасибо. Сделал так:
Код:
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"); } |
![]() |
![]() |
# 10 |
Junior Member
Регистрация: 10.07.2003
Адрес: г. Королев, Россия
Сообщения: 188
![]() ![]() |
Итак, по новой. Все работало, пока сайт не переехал на новый хостинг. И начались проблемы.
На новом месте поддомены лежат выше корня основного домена и такие правила не срабатывают. Т.е. если раньше поддомен www.name.site.ru фактически был папкой www.site.ru/name, то сейчас www.site.ru и www.name.site.ru находятся на одном уровне (а уже внутри них есть свои tmp, cgi-bin и www) Подскажите, PLZ, как быть в этом случае? ЗЫ. Если поможет, то хостинг .Masterhost. |
![]() |