Помогите с созданием динамических поддоменов

Деймос
На сайте с 10.09.2008
Offline
138
1695

Добрый день, помогите пожалуйста с созданием динамических поддоменов, т.е. мне надо чтобы города были на отдельных поддоменах, например: ufa.site.ru, chel.site.ru, tyumen.site.ru и т.д. но при этом поддомены как бы создавались динамически, без создания отдельных папок, т.е. через мод реврайт. У меня сейчас все это добро работает вот так:


RewriteEngine on
RewriteCond %{HTTP_HOST} ^site.ru$
RewriteRule (.*) http://www.site.ru/$1 [R=301,L]
RewriteRule ^catalog/([a-z-]+)/?$ /city.php?city_link=$1

Делаю что то на подобии такого:


RewriteEngine On
RewriteCond %{HTTP_HOST} ^site.ru$
RewriteRule (.*) http://www.site.ru/$1 [R=301,L]
RewriteCond %{HTTP_HOST} !www.site.ru$
RewriteCond %{HTTP_HOST} ^([a-z-]+).site.ru
RewriteRule (.*) $2/city.php?city_link=$1 [L]

и не работает, в панели хостинга в DNS добавил запись A *.site.ru может что то еще надо сделать? Или где я накосячил?

Заранее большое спасибо за ответы.

gormarket
На сайте с 29.12.2010
Offline
47
#1

Деймос,

чтобы использовать в подстановках значения в скобках из шаблонов в RewriteCond, нужно писать %1 (и до %9), в отличии от значений из шаблонов в RewriteRule, которые обозначаются $0 (это весь шаблон) и $1 - $9 (это то что в скобках)

попробуйте так

RewriteEngine On

RewriteCond %{HTTP_HOST} ^site.ru$

RewriteRule (.*) http://www.site.ru/$1 [R=301,L]

это оставляете как есть (редирект с адреса без www на адрес с www),

а дальше так

RewriteCond %{HTTP_HOST} !^www\.

RewriteCond %{HTTP_HOST} ^([a-z-]+).site.ru

RewriteRule (.*) /city.php?city_link=%1 [L]

Т.е в элементе масива ГЕТ ["city_link"] в city.php Вы будете иметь поддомен, а если вам нужен и адрес запрошенной страницы на этом поддомене, то можете сделать так (чтоб в элементе ["url"] иметь адрес страницы)

RewriteCond %{HTTP_HOST} !^www\.

RewriteCond %{HTTP_HOST} ^([a-z-]+).site.ru

RewriteRule (.*) /city.php?city_link=%1&url=$1 [L]

Это все конечно будет работать при нормальной настройке DNS, когда все поддомены будут переадресовываться на основной домен

Можете проверить это в логах сервера, если там есть кроме www.site.ru и site.ru и другие поддомены, то с настройкой DNS все в норме, нужно только настроить реврайты.

Товары и цены в магазинах Вашего города: Городской рынок (http://gormarket.ru/)
S
На сайте с 23.05.2004
Offline
315
#2

Убедитесь для начала, что апач на домен все сабдомены подключает. Т.е. *.domen.ru .

А то может у него прописано domen.ru www.domen.ru , и соответственно все сабдомены пролетают в дефолтный сайт.

Это просто подпись.
SeVlad
На сайте с 03.11.2008
Offline
1609
#3
Деймос:
в панели хостинга в DNS добавил запись A *.site.ru может что то еще надо сделать?

Да и всё. Никаких извращений в хтацессе не нужно.

Да! Перезапустить апач.

Делаю хорошие сайты хорошим людям. Предпочтение коммерческим направлениям. Связь со мной через http://wp.me/P3YHjQ-3.
Деймос
На сайте с 10.09.2008
Offline
138
#4

Всем большое спасибо за ответы, но все равно не работает, т.е. не как не реагирует на модреврайт, заходишь по адресу: ufa.site.ru, а там заглушка что мол "работа данного сайта временно приостановлена", т.е. как бы он видит что поддомен есть, только вот он не работает, я вроде читал что там что то еще надо делать с VirtualHost и ServerAlias, но не знаю где это делать, у меня шаредхостинг от netangels.ru

Деймос
На сайте с 10.09.2008
Offline
138
#5

Сегодня дело сдвинулось с мертвого места, нашел в чем был косяк, в хостинге помимо прописки в ДНС надо было поставить алиас для сайта *.site.ru....

Сейчас в htaccess'е у меня так:


RewriteEngine on
RewriteCond %{HTTP_HOST} ^site.ru$
RewriteRule (.*) http://www.site.ru/$1 [R=301,L]

RewriteCond %{HTTP_HOST} !^www.
RewriteCond %{HTTP_HOST} ^([a-z-]+).site.ru
RewriteRule (.*) city.php?city_link=%1 [L]

При переходе на ufa.site.ru функционал работает, а вот js и css не подгружаются... Из-за чего такое может быть? В шаблоне они прописаны так:


/css/style.css
/js/funcs.js и т.д.

Если в RewriteRule пишу /city.php?city_link=%1 [L] то не работает, пишет 500 ошибку (Internal Server Error)

gormarket
На сайте с 29.12.2010
Offline
47
#6
Деймос:
При переходе на ufa.site.ru функционал работает, а вот js и css не подгружаются...

они в тексте страницы прописаны с относительными путями, и получается что запрашивается что-то типа

ufa.site.ru/css/style.css

ufa.site.ru/js/funcs.js и т.д.

и в конечном итоге Вы наверно получаете (как результат добавленного реврайта)

city.php?city_link=css/style.css

но не обрабатываете в city.php подобные запросы

Попробуйте исключить из обработки этим реврайтом файлы стилей и скрипты

RewriteCond %{HTTP_HOST} !^www.

RewriteCond %{HTTP_HOST} ^([a-z-]+).site.ru

RewriteCond $1 !\.(css|js)$

RewriteRule (.*) city.php?city_link=%1 [L]

можно добавить еще для исключения другие расширения для файлов с основного домена css|js|jpg|swf и так далее

А если реврайт c поддомена делается только для конкретных расширений, например htm или php, то проще описать не исключения, а эти расширения,

изменив 3 строку так

RewriteCond $1 \.php$

или так

RewriteCond $1 \.(htm|php)$

Деймос
На сайте с 10.09.2008
Offline
138
#7

gormarket, спасибо за ответ и за то что все так подробно рассказываете.

Сделал так:

RewriteCond $1 !\.(css|js)$

Все работает, но пришлось еще дописать jpg, png, gif и т.д., это правда не очень правильный вариант получается, т.к. мне реально нужно только с php работать. По этому воспользовался вторым вариантом

RewriteCond $1 \.php$

Но почему то после этого перестает работать функционал, т.е. css и js все норм, а вот вместо того чтобы вывести страницу города он выводит 404 (в хтацесе у меня ErrorDocument 404 /404.php) и он редиректит на 404.php. Не пойму почему так происходит(

gormarket
На сайте с 29.12.2010
Offline
47
#8

Деймос,

при использовании

RewriteCond $1 \.php$

у Вас кажется происходит повторное применение правила,

попробуйте добавить еще исключение для страницы city.php,

т.е. сделать так

RewriteCond %{HTTP_HOST} !^www.

RewriteCond %{HTTP_HOST} ^([a-z-]+).site.ru

RewriteCond $1 !^city\.php$

RewriteCond $1 \.php$

RewriteRule (.*) city.php?city_link=%1 [L]

Деймос
На сайте с 10.09.2008
Offline
138
#9

gormarket, не помогло( Та же ситуация(

Все файлы которые подгружаются только php...

gormarket
На сайте с 29.12.2010
Offline
47
#10

использование сложных реврайтов это обычно танец с бубном :)

Нет возможности проводить эксперименты с поддоменами,

тестировал на модели подобного реврайта, и обнаружил что при наличии

предпоследней строки типа

RewriteCond $1 \.php$

значение %1 записывается пустым (значением city_link получается пустая строка),

но если поднять эту строку чуть выше, то все ОК

(только не спрашиваете меня почему !)

Пробуйте такой вариант, может сработать

RewriteCond %{HTTP_HOST} !^www.

RewriteCond $1 \.php$

RewriteCond %{HTTP_HOST} ^([a-z-]+).site.ru

RewriteRule (.*) city.php?city_link=%1 [L]

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий