Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

.htaccess поддомены переадресация - Как оставить адр. строку в нетронутом состоянии? (amixen)
Автор Сообщение
amixen
Участник форума



Зарегистрирован: 04.07.2005
Сообщ.: 32
Карма: 0
   поощрить/наказать


СообщениеДобавлено: Вс Авг 21, 2005 12:59 pm (написано за 22 минуты 34 секунды)
   Заголовок сообщения: .htaccess поддомены переадресация - Как оставить адр. строку в нетронутом состоянии?
Ответить с цитатой

Приветствую!
Использую ЧПУ, но есть у меня задумка использовать поддомены на сайте. (Начало банальное ;) ).
Хочу расширить функциональность сайта, что бы в зависимости от поддомена быбирались какието условия, например разный дизайн...
За то, что под ДЕНВЕРОМ очень удобно создавать эти самые поддомены (путем создания папок) - отдельное спасибо авторам проекта!!! Действительно быстро и комфортно.
Возникла маленькая проблема с переадресацией.
Мой проект примерно выглядит так:
/home/
   /demo-site.ru
      /asd/
         .htaccess
         index.php - временный с текстом: вы попали в директорию /home/asd/
      /qwe/
         .htaccess
         index.php - временный с текстом: вы попали в директорию /home/qwe/
      /www/
         /images/ - папка с картинками...
         /languages/ - языки...
         ........
         /***/ - всякие другие папки
         .htaccess - основной htaccess
         index.php - основной индексный файл в котором все обрабатывается

Мой хостер создал правила при которых, люди набирающие в строке запроса браузера: http://asd.demo-site.ru или http://qwe.demo-site.ru
попадали в директорию demo-site.ru, но в адресной строчке оставался поддомен! Ну или хотя бы както передавать название домена в виде переменной.

Я хотел создать приближенную ситуацию на локале под ДЕНВЕРОМ.

в /home/asd/.htaccess я прописал:
RewriteRule ^(.*)$ /home/demo-site.ru/www/index.php?$1

на что получил суровое:
Internal Server Error
mod_rewrite: maximum number of internal redirects reached. Assuming configuration error. Use 'RewriteOptions MaxRedirects' to increase the limit if neccessary.
С чего бы ему зацикливаться подумал я...??
И сделал по-другому:
в /home/asd/.htaccess я прописал:
RewriteRule ^(.+)$ http://demo-site.ru/index.php?$1
заработало! Но... адресная строка изменилась :(
Из "http://asd.demo-site.ru" превратилась в "http://demo-site.ru"
Добавил [L]:
RewriteRule ^(.+)$ http://demo-site.ru/index.php?$1 [L]
И вот тут я ожидал развязки, думал, что строка не изменится, но строка опять изменилась и поддомен пропал из строки

ВОПРОС: Как оставить строку в нетронутом состоянии, но что бы осуществлялась переадресация?
Насчет термина "переадресации" я возможно ошибаюсь, прошу не судить.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Maus
Модератор



Зарегистрирован: 29.06.2003
Сообщ.: 7410
Карма: 242
   поощрить/наказать

Откуда: пос. Омсукчан Магаданской области

СообщениеДобавлено: Пн Авг 22, 2005 12:17 pm (спустя 23 часа 18 минут; написано за 10 минут 36 секунд)
   Заголовок сообщения:
Ответить с цитатой

amixen
Думаю, Вам стоит еще раз внимательнее перечитать документацию по mod_rewrite, а также http://www.dklab.ru/chicken/nablas/17.html
ошибки:
amixen писал(а):
Код (Apache config): скопировать код в буфер обмена
RewriteRule ^(.+)$ http://demo-site.ru/index.php?$1
Правило читается как "взять строку, содержащую хоть один символ и дописать к ней слева index.php?". Потом срабатывает правило mod_rewrite: "Если хоть одно правило сработало - перезапустить процесс с новым URI". Так что строка все время удлинялась и удлинялась...

Флаг [L] означает: "Если правило сработало, не читать правила, написанные ниже, а сразу перезапустить процесс".

Самым правильным, имхо, было первое прапило, но ему нужно было некоторые дополнения
Код (Apache config): скопировать код в буфер обмена
RewriteCond %{ENV:REDIRECT_RDR} ^$
RewriteRule ^(.+)$ index.php?$1 [QSA,L,E=RDR:1]
# строкой выше была опечатка!
 
НО, вообще говоря, и это правило не в тему, потому что mod_rewrite работает с относительными URI, то есть не содержащими имя домена.
А Ваш хостер, вероятно, просто указал поддомены в директиве ServerAlias.

P.S. я в вопросах хостинга не разбираюсь абсолютно. Спросите таких людей, как ДК или tIT .

Последний раз редактировалось: Maus (Пн Авг 22, 2005 4:19 pm), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
amixen
Участник форума



Зарегистрирован: 04.07.2005
Сообщ.: 32
Карма: 0
   поощрить/наказать


СообщениеДобавлено: Пн Авг 22, 2005 3:15 pm (спустя 2 часа 57 минут; написано за 15 минут 2 секунды)
   Заголовок сообщения:
Ответить с цитатой

Код (Apache config): скопировать код в буфер обмена
RewriteCond %{ENV:REDIRECT_RDR} ^$
RewRewriteRule ^(.+)$ index.php?$1 [QSA,L,E=RDR:1]
Неа... :( Не заработало...
Цитата:
x:/home/demo-site.ru/asd/.htaccess: Invalid command 'RewRewriteRule', perhaps mis-spelled or defined by a module not included in the server configuration
Счас попробую еще одну вещь...
Счас без всяких htaccess'ов возьму в /home/...../asd/index.php пропишу внутренний редирект!

Нет, ничего не получилось :(
Т.е. директори меняется. Но и УРЛ тоже меняется :(
И в новом урле конечно же информации уже нет в переменной:
Код (php): скопировать код в буфер обмена
$_SERVER['HTTP_HOST']
Я просто хотел получить нечно вроде:
Код (php): скопировать код в буфер обмена
$_SERVER['HTTP_HOST'] = 'asd.demo-site.ru';
Что бы потом использовать это самое asd

Вобщем надо я так понял прописать
Код (Apache config): скопировать код в буфер обмена
*.demo-site.ru


Последний раз редактировалось: amixen (Пн Авг 22, 2005 3:41 pm), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Дмитрий Кóтеров
Администратор



Зарегистрирован: 10.03.2003
Сообщ.: 13553
Карма: 405
   поощрить/наказать


СообщениеДобавлено: Пн Авг 22, 2005 3:41 pm (спустя 26 минут; написано за 56 секунд)
   Заголовок сообщения:
Ответить с цитатой

Вы можете создать новый виртуальный хост вручную (в httpd.conf) и прописать туда:

ServerAlias asd.demo-site.ru http://qwe.demo-site.ru

Причем указать DocumentRoot. Перезапускаете Денвер, и получаете как раз то, что Вам нужно.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
amixen
Участник форума



Зарегистрирован: 04.07.2005
Сообщ.: 32
Карма: 0
   поощрить/наказать


СообщениеДобавлено: Пн Авг 22, 2005 3:43 pm (спустя 1 минуту 32 секунды; написано за 46 секунд)
   Заголовок сообщения:
Ответить с цитатой

Спасибо!
Maus & Дмитрий Кóтеров

Счас сделаю...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Maus
Модератор



Зарегистрирован: 29.06.2003
Сообщ.: 7410
Карма: 242
   поощрить/наказать

Откуда: пос. Омсукчан Магаданской области

СообщениеДобавлено: Пн Авг 22, 2005 4:20 pm (спустя 37 минут; написано за 46 секунд)
   Заголовок сообщения:
Ответить с цитатой

amixen
Да опечатка там была. И я забыл на подсветку глянуть :(
Поправил верхний пост
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
amixen
Участник форума



Зарегистрирован: 04.07.2005
Сообщ.: 32
Карма: 0
   поощрить/наказать


СообщениеДобавлено: Пн Авг 22, 2005 5:03 pm (спустя 42 минуты; написано за 8 минут 14 секунд)
   Заголовок сообщения:
Ответить с цитатой

Дмитрий Кóтеров
Снова наткнулся на какието грабли... :(
Код (Apache config): скопировать код в буфер обмена
#
# Если вы вручную хотите создать виртуальный хост со специфическими
# настройками, то сделайте это сразу же после данного комментария.
# Не помещайте "рукодельные" хосты в конец файла, иначе они не будут
# доступны!
#
# В контейнер VirtualHost может включаться почти любая директива Apache.
# Пример использования директивы VirtualHost:
#
#<VirtualHost ip.address.of.host.some_domain.com>
#    ServerAdmin webmaster@host.some_domain.com
#    DocumentRoot /www/docs/host.some_domain.com
#    ServerName host.some_domain.com
#    ErrorLog logs/host.some_domain.com-error_log
#    CustomLog logs/host.some_domain.com-access_log common
#</VirtualHost>
#
#<VirtualHost _default_:*>
#</VirtualHost>
 
добавляю своё
Код (Apache config): скопировать код в буфер обмена
<VirtualHost lightweb.org>
  DocumentRoot "Z:/lightweb.org"
  ServerName lightweb
# ServerAlias *.lightweb.org
  ErrorLog "Z:/lightweb.org/logs/error.log"
</VirtualHost>
правлю C:\WINNT\system32\drivers\etc\hosts
перед денверовскими строками вписываю туда строку:
127.0.0.1 lightweb.org
перезапускаю denver
в адресной строке пишу:
http://lightweb.org/

>> Невозможно отобразить страницу
ping lightweb.org - всё ок
tracert lightweb.org - всё ок

а страница не отображается :(
И вроде загрузка долго идёт типа что-то пытается загрузить... а потом выводит что стр. не найдена

Опа!!! А счас браузер вобще полез на: http://auto.search.msn.com/response.asp?MT=lightweb.org&srch=5&prov=&utf8
Читал Денвер и Windows XP
но у меня нет прокси, а по настройкам "Контролера доступа" у меня винда английская, а и в русской особенно не в курсе как опция называется... Нет на русском я бы наверное понял.......
В свойствах браузера в "местная интрасеть"->узлы->дополнительно - прописал http://*.lightweb.org
Точнее я прописал lightweb.org винда сама поставила http://*.lightweb.org
Всё какбы правильно
но не фурычит
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Дмитрий Кóтеров
Администратор



Зарегистрирован: 10.03.2003
Сообщ.: 13553
Карма: 405
   поощрить/наказать


СообщениеДобавлено: Пн Авг 22, 2005 7:11 pm (спустя 2 часа 8 минут; написано за 19 секунд)
   Заголовок сообщения:
Ответить с цитатой

<VirtualHost lightweb.org>
  DocumentRoot "Z:/lightweb.org"
  ServerName lightweb

- это неправильно. Смотрите в vhosts.conf, выдерите оттуда пример щаблона и сделайте так же.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
amixen
Участник форума



Зарегистрирован: 04.07.2005
Сообщ.: 32
Карма: 0
   поощрить/наказать


СообщениеДобавлено: Пн Авг 22, 2005 8:16 pm (спустя 1 час 4 минуты; написано за 1 минуту 49 секунд)
   Заголовок сообщения:
Ответить с цитатой

Дмитрий Кóтеров

Вот так пытался:
Цитата:
 Host Z:/lightweb.org
Listen 127.0.0.1:80
<VirtualHost *:*>
  DocumentRoot "Z:/lightweb.org"
  ServerName "lightweb.org"
  ServerAlias "asd.lightweb.org" "www.asd.lightweb.org"
  ScriptAlias /cgi/ "/home/localhost/cgi/"
  ScriptAlias /cgi-bin/ "/home/localhost/cgi-bin/"
  ErrorLog "Z:/lightweb.org/logs/error.log"
</VirtualHost>
и так тоже...
Цитата:
# Host /home/lightweb.it
Listen 127.0.0.1:80
<VirtualHost lightweb.it:*>
  DocumentRoot "Z:/home/lightweb.it/www"
  ServerName "www.lightweb.it"
  ServerAlias "asd.lightweb.it" "www.asd.lightweb.it"
  ScriptAlias /cgi/ "/home/lightweb.it/cgi/"
  ScriptAlias /cgi-bin/ "/home/lightweb.it/cgi-bin/"
  ErrorLog "/home/lightweb.it/error.log"
</VirtualHost>
Ноль эмоций...

lightweb.it - это я еще один создал в папке Z:/home/lightweb.it. Ну т.е. стандартно уже...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Дмитрий Кóтеров
Администратор



Зарегистрирован: 10.03.2003
Сообщ.: 13553
Карма: 405
   поощрить/наказать


СообщениеДобавлено: Пн Авг 22, 2005 8:59 pm (спустя 42 минуты; написано за 11 секунд)
   Заголовок сообщения:
Ответить с цитатой

Должно получиться. Пробуйте дальше, ищите ошибку.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Гость






Карма: 367
   поощрить/наказать


СообщениеДобавлено: Вт Авг 23, 2005 3:47 pm (спустя 18 часов 48 минут; написано за 5 минут 18 секунд)
   Заголовок сообщения:
Ответить с цитатой

ну вот, разобрался... :)

Значится так:
и первый и второй вариант подходит!
Цитата:
Listen 127.0.0.1:80
<VirtualHost *:*>
  DocumentRoot "Z:/lightweb.org"
  ServerName "lightweb.org"
  ServerAlias "asd.lightweb.org" "www.asd.lightweb.org"
# ScriptAlias /cgi/ "/home/localhost/cgi/"
# ScriptAlias /cgi-bin/ "/home/localhost/cgi-bin/"
  ErrorLog "Z:/lightweb.org/logs/error.log"
</VirtualHost>
Цитата:
Listen 127.0.0.1:80
<VirtualHost *:*>
  DocumentRoot "Z:/home/lightweb.it/www/"
  ServerName "www.lightweb.it"
  ServerAlias "asd.lightweb.it" "www.asd.lightweb.it"
  ScriptAlias /cgi/ "/home/localhost/cgi/"
  ScriptAlias /cgi-bin/ "/home/localhost/cgi-bin/"
  ErrorLog "/home/lightweb.it/error.log"
</VirtualHost>
Оба варианта рабочие! Если в папке лежит index.html !!!! Всё корректно пашет в том числе и поддомены! Но в моём случае, нужно было юзать index.php. А вот в нём то и дело. Как только я писал в адресной строке http://lightweb.it ( а там лежит index.php)
Сваливался апач...! Вот собсно и всё! Проблема была именно в index.php. Странно, только почему так радикально влияла ошибка , что апач сыпался... Ну ничего разберемся!

Дмитрий Кóтеров и Maus, спасибо за сотрудничество!
Вернуться к началу
amixen
Участник форума



Зарегистрирован: 04.07.2005
Сообщ.: 32
Карма: 0
   поощрить/наказать


СообщениеДобавлено: Вс Авг 28, 2005 1:11 pm (спустя 4 дня 21 час 23 минуты; написано за 57 секунд)
   Заголовок сообщения:
Ответить с цитатой

Да, ошибку в скрипте ликвидировал. Всё заработало исправно!

Вопрос решен, тему можно закрыть.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Евгений Галашин
Модератор



Зарегистрирован: 29.12.2003
Сообщ.: 1862
Карма: 30
   поощрить/наказать


СообщениеДобавлено: Вс Авг 28, 2005 1:55 pm (спустя 44 минуты)
   Заголовок сообщения:
Ответить с цитатой


М

Тема закрыта.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение ICQ Number
Показать сообщения:   
Начaть нoвую тeму   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения. Часовой пояс: GMT + 3 (Москва)
Страница 1 из 1   
Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете голосовать в опросах. Вы не можете прилагать файлы к сообщениям. Вы можете скачивать файлы.
  XML