Create dynamic subdomain

ISAPI_Rewrite is Apache mod_rewrite compatible URL rewriter for Microsoft IIS
User avatar
Posts: 9
Joined: 30 Jan 2013, 19:35

Create dynamic subdomain

30 Jan 2013, 19:46

Hi,
I need a rule for get content from:
mysite.ru/index.asp?city=moscow
to
moscow.mysite.ru

I want to do that:
mysite.ru/index.asp?city=moscow => moscow.mysite.ru
and
www.mysite.ru/index.asp?city=moscow => www.moscow.mysite.ru

If it's possible.
I have a full ISAPI_Rewrite 3.0

Sergey.

User avatar
Posts: 6
Joined: 31 Jan 2013, 09:15

Re: Create dynamic subdomain

31 Jan 2013, 09:36

Simply create a rule like

Code: Select all
RewriteRule    www\.mysite.ru/index\.asp\?city=moscow     http\://www.moscow.mysite.ru           [I,RP]



Best regards
Anton

User avatar
Posts: 9
Joined: 30 Jan 2013, 19:35

Re: Create dynamic subdomain

31 Jan 2013, 10:04

Я знаю, что разработчики говорят по-русски, поэтому позволю себе спросить на родном языке:
мне нужно правило, которое бы автоматом формировало поддомены чтоли в зависимости от параметра в урле ..
т.е., например у меня есть адреса вида:
mysite.ru/index.asp?city=moscow
mysite.ru/index.asp?city=boston
mysite.ru/index.asp?city=ny
...
На этих адресах показывается определенный контент.

И мне нужно создать правило, которое бы формировало поддомен:
moscow.mysite.ru
boston.mysite.ru
ny.mysite.ru
...
и показывало на нем контент из урла с параметрами:
Их много, и чтобы на них был тот же контент, что и у урлов с параметрами. Не редирект, а чтобы урл открывался и оставался на поддомене.
Такое возможно ?

Т.е. не создавать в ДНС-е тысячи записей, а воспользоваться правилами ISAPI Rewrite.
Например, физически у меня в ДНС-е нет записи "moscow.mysite.ru"
Но я бы хотел, чтобы юзер смог у себя в браузере набрать этот адрес и чтобы он увидел контент вот этого адреса "mysite.ru/index.asp?city=moscow" и при этом не происходило редиректа, а юзер оставался на "moscow.mysite.ru"

Большое спасибо.
С уважением, Сергей.

User avatar
Posts: 6
Joined: 31 Jan 2013, 09:15

Re: Create dynamic subdomain

31 Jan 2013, 10:25

Дружище, боюсь такое невозможно.

Тебе нужно хоть как иметь эти поддомены.
Все что делает ISAPI - перекидывает запросы с одного вида на другой, но конечный запрос должен быть чем-то реальным, иначе браузеру неясно куда идти-то?

А если ты хочешь чтобы вообще никакого редиректа не происходило, а просто в строке браузера выглядело красиво - то это уже что-то из области JavaScript я думаю, вот им может быть и возможно что-то сделать, если бразуер разрешит рисовать не те УРЛ, что на самом деле, но опять же ISAPI тут ни при чем.

Так мне кажется, могу ошибаться канеш.

User avatar
Posts: 9
Joined: 30 Jan 2013, 19:35

Re: Create dynamic subdomain

31 Jan 2013, 10:42

Я точно помню, правда давно было, что я игрался с правилами и таки добился работы поддоменов без записей в ДНС. Это точно на 100%.
Т.е. такое в принципе возможно. Другой вопрос - как ? Я уже не помню. плюс ко всему их бы еще в динамике получать.

User avatar
Posts: 1264
Joined: 07 Mar 2012, 10:16

Re: Create dynamic subdomain

31 Jan 2013, 10:54

Здравствуйте,

Могу успокоить. Реализовать такие правила можно и без создания фактических суб-доменов(ISAPI_Rewrite обрабатывает запросы до IISa):

Code: Select all
RewriteEngine on
RewriteBase /

# redirect www.mysite.ru/index.asp?city=moscow ------> www.moscow.mysite.ru
RewriteCond %{HTTP:Host} ^www\.mysite.ru$ [NC]
RewriteCond %{QUERY_STRING} ^city=([^/]+)$ [NC]
RewriteRule ^index\.asp$ http://www.%1.mysite.ru [NC,R=301,L]

#rewrite(proxy) to load content for sub-domain
RewriteCond %{HTTP:Host} ^www\.([^.]+)\.mysite.ru$ [NC]
RewriteRule . http://www.mysite.ru/index.asp?city=%1 [NC,P]



С Уважением,
Андрей

User avatar
Posts: 6
Joined: 31 Jan 2013, 09:15

Re: Create dynamic subdomain

31 Jan 2013, 11:07

Очень интересно, не знал про такую удивительную возможность ISAPI_Rewrite!

Только все же не совсем понятно, приходит ли нашему браузеру что-то навроде
Code: Select all
302 Location: (город).mysite.ru

или же нет?

Если приходит - то браузер побежит за адресом (город).mysite.ru в DNS (а там его нет!).
Если не приходит - то почему строка браузера будет изменена с http://www.mysite.ru/index.php?... на http://www.(город).mysite.ru?

User avatar
Posts: 9
Joined: 30 Jan 2013, 19:35

Re: Create dynamic subdomain

31 Jan 2013, 18:14

Добрый день, Андрей !
К сожалению, Ваше правило у меня не заработало. Ни с "www", ни без "www".
У меня зарегистрирован домен - mydomain.ru
Если набрать его в браузере - открывается некий контент.
В Helicon Manager для этого домена я написал:
Code: Select all
RewriteEngine on
RewriteBase /

RewriteCond %{HTTP:Host} ^www\.mydomain.ru$ [NC]
RewriteCond %{QUERY_STRING} ^city=([^/]+)$ [NC]
RewriteRule ^index\.asp$ http://www.%1.mydomain.ru [NC,R=301,L]

RewriteCond %{HTTP:Host} ^www\.([^.]+)\.mydomain.ru$ [NC]
RewriteRule . http://www.mydomain.ru/index.asp?city=%1 [NC,L]


Но, если в браузере набрать:
- qqq.mydomain.ru
- http://www.qqq.mydomain.ru
ничего не происходит. Выскакивает ошибка "Сервер qqq.mydomain.ru не найден из-за ошибки поиска DNS"

Буду очень признателен Вам за помощь.
С уважением, Сергей.

User avatar
Posts: 1264
Joined: 07 Mar 2012, 10:16

Re: Create dynamic subdomain

31 Jan 2013, 20:12

Вот пример схожей проблемы и ее решение, все очень похоже. Нужно отметить, что wildcard для субдоменов установить все-таки нужно, если это не делалось.
Если вы сразу правила используете в .htaccess, то сократить можно до:

Code: Select all
RewriteEngine on

RewriteCond %{QUERY_STRING} ^city=([^/]+)$ [NC]
RewriteRule ^index\.asp$ http://www.%1.mydomain.ru [NC,R=301,L]

RewriteCond %{HTTP:Host} ^www\.([^.]+)\.mydomain\.ru$ [NC]
RewriteRule . http://www.mydomain.ru/index.asp?city=%1 [NC,L]


Если все равно не получается, то подавайте логи - будем смотреть.
Логи можно включить, разместив следующие строки в httpd.conf

Code: Select all
#enabling rewrite.log
RewriteLogLevel 9
#enabling error.log
LogLevel debug


не забывайте отключать логи после тестового запроса.

User avatar
Posts: 9
Joined: 30 Jan 2013, 19:35

Re: Create dynamic subdomain

01 Feb 2013, 18:08

Странная ситуация.
У меня IIS стоит за ISA Server-ом, т.е., чтобы работали сайты - мне надо сделать их публикацию на ISA и потом прописать на IIS.
Так вот я наблюдаю вот такую штуку:
- в ДНС-е записи нет
- публикую в ISA qqq.mysite.ru (пробрасываю его на внутренний комп с IIS)
- на IIS в настройках сайта прописываю еще и qqq.mysite.ru
- никаких правил в ISAPI не добавляю
И о чудо - qqq.mysite.ru открывается.

Конечно, это совсем не то, что мне нужно. В общем мне кажется, что надо мне тестовый сайт повесить на белый IP и уже там тестировать правила.
В выходные постараюсь заняться и о результатах сообщу.

С уважением, Сергей.

User avatar
Posts: 1264
Joined: 07 Mar 2012, 10:16

Re: Create dynamic subdomain

01 Feb 2013, 19:49

ISA... вполне возможны ращличные ситуации...
Ждем новостей.

С Уважением,
Андрей.

User avatar
Posts: 9
Joined: 30 Jan 2013, 19:35

Re: Create dynamic subdomain

06 Feb 2013, 06:18

1. wildcard для субдоменов прописали
2. на ISA сделали правило для *.mysite.ru - все запросы уходят на IIS
3. субдомены открываются, только если их прописать в привязке к сайту в IIS
4. логи ошибок пустые

Вот полный код для моего сайта:
Code: Select all
RewriteEngine On
RewriteBase /

#enabling rewrite.log
RewriteLogLevel 9
#enabling error.log
LogLevel debug

RewriteCond %{QUERY_STRING} ^city=([^/]+)$ [NC]
RewriteRule ^index\.asp$ http://www.%1.mysite.ru [NC,R=301,L]

RewriteCond %{HTTP:Host} ^www\.([^.]+)\.mysite\.ru$ [NC]
RewriteRule . http://www.mysite.ru/index.asp?city=%1 [NC,L]

RewriteRule /index.html /index.asp [NC,L]


если прописать в IIS, а потом открыть в браузере:
qqq.mysite.ru
eee.mysite.ru
они открываются

если не прописывая в IIS попытаться открыть:
abrakadabra.mysite.ru
то выдает вот что
Code: Select all
Bad Request - Invalid Hostname
HTTP Error 400. The request hostname is invalid.


Rewrite в принципе работает, т.к.
Code: Select all
RewriteRule /index.html /index.asp [NC,L]

обрабатывается и mysite.ru/index.html открывается.

IIS на 2008-м сервере.

С уважением, Сергей.

User avatar
Posts: 9
Joined: 30 Jan 2013, 19:35

Re: Create dynamic subdomain

06 Feb 2013, 07:27

Нашел тут тему:
http://www.helicontech.com/community/Pass_subdomain_as_parameter-9-141.html?p=613&hilit=subdomain#p613

Ради эксперимента заменил свой файл на вот это:
Code: Select all
RewriteEngine on
RewriteBase /

RewriteCond %{HTTP:Host} !^www\.mysite\.ru$
RewriteCond %{HTTP:Host} ^([^.]+)\.mysite\.ru$
RewriteRule ^$ /index.asp?ID=%1 [NC,L]


Я так понимаю, что при вводе в браузере:
Code: Select all
abrakadabra.mysite.ru

меня должно перебросить на урл:
Code: Select all
mysite.ru/index.asp?id=abrakadabra


Но, к сожалению, я остаюсь на том же урле и у меня по-прежнему:
Code: Select all
Bad Request - Invalid Hostname
HTTP Error 400. The request hostname is invalid.


Такое ощущение, что поддомены IIS сама как-то обрабатывает не передавая это в Rewrite.

С уважением, Сергей.

User avatar
Posts: 1264
Joined: 07 Mar 2012, 10:16

Re: Create dynamic subdomain

06 Feb 2013, 10:22

Наверное, мой недосмотр.После того как вы сделали wildcard:

Code: Select all
*.example.com.   3600 IN  MX 10 host1.example.com.


Дальше, иис, он обрабатывает хидер HOST - раньше рерайта, т.к. иису нужно знать на какой сайт/пул передать запрос на выполнение
Стало быть надо сделать сайт в иисе который будет слушать все запросы на этом IP/порту или перечислять все нужные ему поддоменыю
А когда уж иис выберет сайт, то там свое дело сделает рерайт и перепишет на http://www.mysite.ru/index.asp?city=%1 и все получится.
То есть в этой цепи не хвататет сейчас сайта в IIS, одного, который будет слушать запросы.

С Уважением,
Андрей

User avatar
Posts: 9
Joined: 30 Jan 2013, 19:35

Re: Create dynamic subdomain

06 Feb 2013, 15:10

В общем сделал так:
- в IIS сайт, в котором прописано, чтобы он открывался по запросам
192.168.1.5 - mysite.ru
192.168.1.5 - www.mysite.ru
Эти сайты открываются.

- в IIS сайт, в котором никаких названий сайтов не прописано
192.168.1.5 - пусто
Рерайт для этого сайта следующий:
Code: Select all
RewriteEngine On
RewriteBase /

#enabling rewrite.log
RewriteLogLevel 9
#enabling error.log
LogLevel debug

RewriteCond %{QUERY_STRING} ^city=([^/]+)$ [NC]
RewriteRule ^index\.asp$ http://www.%1.mysite.ru [NC,R=301,L]

RewriteCond %{HTTP:Host} ^www\.([^.]+)\.mysite\.ru$ [NC]
RewriteRule . http://www.mysite.ru/index.asp?city=%1 [NC,L]


Сайты смотрят в разные папки.
При обращении по адресу:
abrakadabra.mysite.ru - обычная ошибка IIS, т.к. вторая папка пуста. Но, если в нее положить какой-нибудь файл - он открывается.
http://abrakadabra.mysite.ru/client10.png - открывается. Файл "client10.png" лежит в папке для второго сайта.

Что-то в правилах рерайта, видимо.
С уважением, Сергей.

User avatar
Posts: 1264
Joined: 07 Mar 2012, 10:16

Re: Create dynamic subdomain

07 Feb 2013, 10:35

Такие правила мы пишем довольно часто, можете еще раз посмотреть на схожую проблему, на которую я ссылался ранее.
Где-то что-то было пропущено, я думаю. Попробуйте сделать все заново, на чистую. Если не получится, то напишите нам на почту или в helpdesk и дайте доступ к серверу, если возможно.

с Уважением,
Андрей

Return to ISAPI_Rewrite 3.0

Who is online

Users browsing this forum: No registered users and 0 guests