Настройка поддоменов с помощью htaccess

12
Р
На сайте с 17.05.2011
Offline
136
2257

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

Воюю с htaccess - пытаюсь сделать URLы вида

http://subdomain.example.com => http://example.com/subdomain

http://subdomain.example.com/section => http://example.com/subdomain/?section=section

http://subdomain.example.com/section/page => http://example.com/subdomain/?section=section&page=page

http://subdomain.example.com/section/id/title => http://example.com/subdomain/?section=section&id=id

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

http://subdomain.example.com/sitemap.xml => http://example.com/subdomain/sitemap.xml

Хочу заметить, что subdomain, section, page и т.д. - это произвольные строки.

Итак, первую часть (до пункта "все остальное должно...") я сделал и оно работает. htaccess для этого у меня вот такой:

RewriteEngine on

RewriteCond %{HTTP_HOST} ^(.*)\.example\.com [NC]

RewriteRule ^([^/.]+)/?$ %1/index.php?section=$1 [L,QSA]

RewriteCond %{HTTP_HOST} ^(.*)\.example\.com [NC]

RewriteRule ^([^/.]+)/([^/.]+)/?$ %1/index.php?section=$1&page=$2 [L,QSA]

RewriteCond %{HTTP_HOST} ^(.*)\.example\.com [NC]

RewriteRule ^([^/.]+)/([^/.]+)/([^/.]+)/?$ %1/index.php?section=$1&id=$2 [L,QSA]

Это все отлично работает. Но те же сайтмепы Апач не выдает :( Но это и понятно - URL не подпадает ни под один шаблон, ссылка не получает имя корневой папки (совпадающей с именем поддомена), а в корне сайтмэпа нет.

Я пытался намутить шаблон для URLа на сайтмэп, но во-перых так у меня это и не заработало (видимо, вступает в конфликт с другими правилами или я что-то не докрутил с регулярными выражениями - не удивительно, я так и не смог их толком понять), а во-вторых это мне кажется не совсем верный путь, хорошо бы htaccess построить по принципу: сначала превратить поддомен в папку, а потом уже к полученной строке прикладывать правила - выделять параметры из пути или оставлять все как есть.

Помогите плиз. Целый день сижу, читаю доки, статьи, пробую разные варианты, уже никак не могу сладить...

Спасибо заранее!

adel92
На сайте с 04.01.2012
Offline
334
#1

Что у Вас за панель? Самым правильным в этой ситуации будет создание поддоменов вида

1.site.ru

в отдельных каталогах, а не в директории сайта

Насколько проблемно переделать, зависит от панели

NVMe VDS (https://well-web.net/nvme-vps) с поддержкой 24/7 - от 545 руб.! Безлимитный хостинг (https://well-web.net/ssd-hosting) - от 129 руб.! Домен в подарок! Перенос бесплатно! Заказывайте сейчас, и получите скидку 50%! Заходи! (https://well-web.net/limited-offers)
Р
На сайте с 17.05.2011
Offline
136
#2
adel92:
Что у Вас за панель? Самым правильным в этой ситуации будет создание поддоменов вида
1.site.ru
в отдельных каталогах, а не в директории сайта

Насколько проблемно переделать, зависит от панели

Это TimeWeb. У них своя панель.

Это было бы правильно, если бы у меня было какое-то лимитированное и заранее известное количество поддоменов. У меня не так, к сожалению.

Да и возможно, что на моем тарифе хостер не разрешит создавать полностью независимые поддомены (у них тариф включает 1 сайт).

Я не вижу никаких проблем в избранной технологии.

adel92
На сайте с 04.01.2012
Offline
334
#3

В htaccess каждого поддомена нужно добавить строку:

RewriteBase /

после этого должно рабоатть

---------- Добавлено 18.01.2017 в 20:33 ----------

Только прийдется для каждлого поддомена отдельный htaccess делать.

Р
На сайте с 17.05.2011
Offline
136
#4
adel92:
В htaccess каждого поддомена нужно добавить строку:

RewriteBase /


после этого должно рабоатть

---------- Добавлено 18.01.2017 в 20:33 ----------

Только прийдется для каждлого поддомена отдельный htaccess делать.

Правильно я понял, что надо все тоже самое, но в каждую "поддоменную" папку положить .htaccess с единственной инструкцией

RewriteBase /

?

Корневой нужно оставить как есть?

adel92
На сайте с 04.01.2012
Offline
334
#5

Да все правильно, это правило, отменяет все что было раньше, и заставляет ту папку в которой лежит данный файл считать корнем, то есть то что раньше было не действует, свои правила какие нужны прописывайте.

SeVlad
На сайте с 03.11.2008
Offline
1609
#6
Рамарио:
Это было бы правильно, если бы у меня было какое-то лимитированное и заранее известное количество поддоменов. У меня не так, к сожалению.

Это решается wilcard-доменами. Это единственно правильное решение.

Если хостер не позволяет этого - есть много других.

Рамарио:
Я не вижу никаких проблем в избранной технологии.

Открываю глаза, следи внимательно: c 5го поста и до конца.

Делаю хорошие сайты хорошим людям. Предпочтение коммерческим направлениям. Связь со мной через http://wp.me/P3YHjQ-3.
adel92
На сайте с 04.01.2012
Offline
334
#7
SeVlad:
Это решается wilcard-доменами. Это единственно правильное решение.
Если хостер не позволяет этого - есть много других.

Открываю глаза, следи внимательно: c 5го поста и до конца.

Да ладно

RewriteBase /

Делает любую папку корневой, и пишите в том htaccess что хотите.

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

SeVlad
На сайте с 03.11.2008
Offline
1609
#8
adel92:
Да ладно

Осиль ссылку, нечитатель-школохостер.

Р
На сайте с 17.05.2011
Offline
136
#9
adel92:
Да все правильно, это правило, отменяет все что было раньше, и заставляет ту папку в которой лежит данный файл считать корнем, то есть то что раньше было не действует, свои правила какие нужны прописывайте.

Я пока вот как сделал:

в корне лежит .htaccess с содержанием

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.*)\.example\.com
RewriteRule ^$ %1/$1 [L,QSA]

И это, вроде, работает. Во всяком случае запросы типа "http://subdomain.example.com/?key=value" доходят до скрипта, расположенного в "/homewww/subdomain/index.php?key=value"

Дальше как вы советовали я планировал разместить в папках свои .htaccess (/homewww/subdomain/.htaccess) примерно следующего содержания:

RewriteEngine on
RewriteRule ^([^/.]+)/?$ index.php?section=$1 [L,QSA,NC]

Но не работает, собака :(

Причем запрос вида "http://subdomain.example.com/?key=value" работает, а "http://subdomain.example.com/index.php?key=value" (т.е. с явным указанием названия скрипта) почему-то нет!!!

Ну и запросы вида "http://subdomain.example.com/value" не проходят :(

Не подскажете что здесь не так? Спасибо!

S
На сайте с 30.09.2016
Offline
469
#10
Рамарио:
Не подскажете что здесь не так? Спасибо!

Не так здесь то, что чтобы использовать $1, надо его получить. А его нет в выражении

RewriteRule ^$ %1/$1 [L,QSA]
Чтобы $1 появился, надо написать
RewriteRule ^(.*)$ %1/$1 [L,QSA]
Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
12

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