mod_rewrite. Динамические subdomen. Загнать значение субдомена в переменную.

mar_a

Новичок
mod_rewrite. Динамические subdomen. Загнать значение субдомена в переменную.

Задача
Преобразовать sub_dom.test1.ru к виду test1.ru/?who=sub_dom
Это первая часть
Вторая часть
Преобразовать sub_dom-select.test1.ru к виду test1.ru/?who=sub_dom&qwery=select

Естественно
код к первой части:
PHP:
RewriteEngine On
#Убираем зацикливание
RewriteCond %{REQUEST_URI} !^/index.php?(.*)?$
# выделяем субдомен из нужного места
RewriteCond %{HTTP_HOST} ^(www\.)?([^.]+)\.test1\.ru$ [NC]
# Преобразуем субдомен в переменную которую я хотел-бы видеть
#RewriteRule ^(.*)$ /index.php?who=$1 [QSA,L]  #И этот вариант тоже разбирал
RewriteRule ^([a-z0-9]*)\.test1\.ru/?(.*) http://test.ru/index.php?who=$1 [QSA,L]
Тут то и незадача...
По умолчанию обращение ведется в директорию которая должна существовать
заранее
Например если вызов
sub_dom.test1.ru => test1.ru/sub_dom/?xxxxxxxx

Apache 2.0
 

MiksIr

miksir@home:~$
RewriteCond %{HTTP_HOST} ^(www.)?([^.]+).test1.ru$ [NC]
RewriteRule ^(.*)$ /index.php?who=%2

# back-references ($N) to the RewriteRule pattern
# back-references (%N) to the last matched RewriteCond pattern
 

mar_a

Новичок
Спасибо за старанее MiksIr, но к сожалению непомогло.

Попрежднему сопоставление ведется и происходит обращение к
директории с одноименным наименованием субдомена
Т.е. попрежднему
sub_dom.test1.ru => test1.ru/sub_dom/
 

MiksIr

miksir@home:~$
ваш косяк в другм месте - и скорее всего в конфиге
все эти домены должны быть в одном виртуальном хосте...
покажите свой конфиг (hint: paste.org.ru)
 

mar_a

Новичок
Еще раз
Основной домен test1.ru
Субдомен (динамический) sub_dom.test1.ru
вместо sub_dom - может быть все что угодно (ну не создавать мне столько директорий в самом-то деле).
поэтому думаю выполнить правило которое вне зависимости от
наименования субдомена определяло -бы переменную (с которой я справился-бы).

Мой конфиг (я так понял про httpd.conf)
Denver 3:

<VirtualHost 127.0.0.1:80>
DocumentRoot "Z:/home/test1.ru/new"
ServerName "new.test1.ru"
ServerAlias "new.test1.ru" "www.new.test1.ru"
ScriptAlias /cgi/ "/home/test1.ru/cgi/"
ScriptAlias /cgi-bin/ "/home/test1.ru/cgi-bin/"
</VirtualHost>


Вот оно :
DocumentRoot "Z:/home/test1.ru/new" !!!!
какого ХУдожника в NEW прописывается
Заметим что данный VirtualHost - формируеться Денвером 3 автоматически...
(Ну на локалке понятно , а как быть с удаленным сервером доступа к конфигу у меня нет.)
И собственно .htaccess я то и использую для изменения.

-----------------------------------------------------
Если пишу
ServerAlias "*.test1.ru"
выдает 500 ошибку

-~{}~ 12.02.09 16:05:

MiksIr
Извини paste.org.ru - непойму как он мне поможет
 

MiksIr

miksir@home:~$
Пишите без кавычек
ServerName new.test1.ru
ServerAlias *.test1.ru
должно работать
На удаленном сервере нужно смотреть возможности панели управления - все должны позволить запихнуть домен по маске в один виртуал хост
 

mar_a

Новичок
MiksIr
Сорри , без ковычек написано , эт я не отредактировал когда вставлял...

Попробовал Ваши коментарии - увы не помогло...
Т.е. пробовал как на локалке так и на удаленном домене.

Разумееться апач - перегружал

Зададим вопрос по другому...

Можно ли такое вообще выполнить...
Или эта директория будет постоянно меня приследовать?
Просто в факе по апачу сказано что при таком правиле необходимо РЕАЛЬНАЯ папка (директория).

Попутно , еще пытался правило реврайта делать - но это наверное не правильный шаг.
 

MiksIr

miksir@home:~$
Ну смотри логи про 500-ю ошибку - может на реврайты и ругается уже
 

mar_a

Новичок
Увы ...
Поставил расширенный лог и
результат всего такой (но к моей проблеме отношения не имеет)
[error] [client 127.0.0.1] File does not exist: Z:/home/test1.ru/new/favicon.ico, referer: http://new.test1.ru/

Но когда задаю тупо имя домена test1.ru то

[Thu Feb 12 16:04:04 2009] [alert] [client 127.0.0.1] Z:/home/test1.ru/www/.htaccess: ServerName not allowed here
[Thu Feb 12 16:04:04 2009] [alert] [client 127.0.0.1] Z:/home/test1.ru/www/.htaccess: ServerName not allowed here, referer: http://test1.ru/

Это дает ваша рекомендуемая строка :
ServerName *.test1.ru

Если ее коментирую - все по прежднему - без ошибок и разворот идет на директорию
http://test1.ru/sub_dom/ ( при sub_dom.test1.ru )

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

MiksIr

miksir@home:~$
Я там изначальна описался. Должно быть
ServerName new.test1.ru
ServerAlias *.test1.ru
И пишется это в конфиге виртуального хоста, а не в .htaccess
Смотрите документацию апача по name-based virtual host
 

mar_a

Новичок
Если на локалке я исправлю , то 100% на реальном хостинге мне это никто не даст поправить...(Для управления только .htaccess)
Или параметры DNS доменного имени , но там уже стоит *.test1.ru для A ...

Все равно спасибо через некоторое время я проверю на локалке...
СОВЕТ СЛУЧАЯ
ServerName new.test1.ru
ServerAlias *.test1.ru

-~{}~ 13.02.09 17:02:

<VirtualHost 127.0.0.1:80>
DocumentRoot "Z:/home/test1.ru/www"
ServerName new.test1.ru
ServerAlias *.test1.ru
ScriptAlias /cgi/ "/home/test1.ru/cgi/"
ScriptAlias /cgi-bin/ "/home/test1.ru/cgi-bin/"
</VirtualHost>

1) Специально потратил время на кавычки и без кавычек даже документ руут переписал в нужную папку корень основного домена home/test1.ru/www но правила все равно результат остается неизменным на Z:/home/test1.ru/new/ !!! (Грусный смайлик , даже обиженный)

2)Стоп , а ServerName new.test1.ru - по логике вещей , если вместо new внести sub_dom - это значит еще необходимо править каждый раз VirtualHost??
Это слишком...

Видимо это ошибочный путь...
Или данную проблему вообще невозможно решить без
ЗАРАНЕЕ заведенной директории (папки).
 

MiksIr

miksir@home:~$
http://httpd.apache.org/docs/2.0/vhosts/name-based.html
Первое что нужно прочесть.. вдумчиво.
После этого, понять - как же работает конфиг. Приведенный вариант должен работать для всех <что-то>.test1.ru и отдавать контент из Z:/home/test1.ru/www. Если он этого не делает - возможно есть другой вирутал хост, который перехватывает эту обработку или что-то подобное.
Апач - это не шаманство, это продукт работающий по определенным правилам и шаманская подстановка папки в них не входит.
 

mar_a

Новичок
*****
Спасибо что откликнулся ...

Затем что основной домен один и будет... test1.ru
Все остальные будут виртуальные , что-то типа блога и каждый его пользователь будет иметь красивый свой виртуальный субдомен.

Как ВЫ уже догадались на каждого будет нецелесообразно заводить директорию (папку , каталог).

Вот как идею рассматриваю такой случай...
Если это заранее не правильный (невозможный) путь то прошу сказать что это НЕВОЗМОЖНО ...
я успокоюсь...

-~{}~ 13.02.09 17:31:

MiksIr
Тебя понял ...
Есть сборка Denwer.ru 3 я ее использую на винде.
Видимо я ступил subdomen.test1.ru есть еще на виртуале...
Неужели он ведет перехват...

# Host /home/test1.ru/subdomain (9):
#Listen 127.0.0.1:80
#NameVirtualHost 127.0.0.1:80
<VirtualHost 127.0.0.1:80>
DocumentRoot "Z:/home/test1.ru/subdomain"
ServerName "subdomain.test1.ru"
ServerAlias "subdomain.test1.ru" "www.subdomain.test1.ru"
ScriptAlias /cgi/ "/home/test1.ru/cgi/"
ScriptAlias /cgi-bin/ "/home/test1.ru/cgi-bin/"
</VirtualHost>

Как по мне то если-бы мешал или перехватывал то :
субдомен new.test1.ru не работал- бы... т.к. он написан ниже этого правила.

Полностью согласен что апач не шаманство...

Теперь 1) Если на локале ВОЗМОЖНО что-то (выясняю что именно) и перехватывает то почему на основном домене у хостера проблема аналогична при такой-же конфигурации .htaccess как и на локалке...
2) Неподумайте неправильно VirtualHost - редактирую в апачевском конфиге только на локалке и в .htaccess не запихиваю как на локале так и у хостера...
 

Фанат

oncle terrible
Команда форума
я не спрашиваю, что будет.
я спрашиваю, зачем что-то преобразовывать, если запросы и так будут приходить на test1.ru?
 

mar_a

Новичок
*****
Не спорю , но каталог - он мне мягко сказать немного мешает!
Если бы запросы приходили - бы на корень домена /www/ вопросов небыло-бы
Но каталог постоянно динамическим быть не может и если я правильно ВАС понял .
В случае обращения sub_dom.test1.ru => test1.ru/sub_dom/
причем при отсутствии реального каталога /sub_dom/
ХОСТ - не найден...

Я правильно ВАС понял ??? Или нет?
 

mar_a

Новичок
*****
Вы правы нет и мне не нужен каталог...
Но при вышеуказанном правиле mod_rewrite
все пути сводятся к
sub_dom.test1.ru к виду test1.ru/sub_dom/
вместо того что мне надо:
sub_dom.test1.ru к виду test1.ru/?who=sub_dom
 

Фанат

oncle terrible
Команда форума
нафига тебе ВООБЩЕ вышеуказанный mod_rewrite со всеми его правилами?

-~{}~ 13.02.09 17:50:

MiksIr, к тебе тот же самый вопрос
 

mar_a

Новичок
*****
Отлично ...
Я ищу правильно , и оперировал ( искал как решить проблему ) с форумом в поиска решения проблемы...
Мои мысли свелись к mod_rewrite
но если это неправильно , то прошу помощи подсказать ЧТО правильно...
Или как правильно?
 
Сверху