Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: mod_rewrite поддомены и чпу  (Прочитано 3174 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Doka

  • Автор темы
  • Участник
  • *
  • Сообщений: 151
  • PHP developer (symfony, yii2)
    • Просмотр профиля
    • Создание сайтов в Нижнем Тагиле
mod_rewrite поддомены и чпу
« : 11 Май 2010, 16:18:49 »
Добрый утро/день/вечер/ночь, товарищи!  :)

Обращаюсь к Вам с таким вопросом.

Мне нужно настроить сайт таким образом чтобы адреса вида test.exapmle.com преобразовывались в /index.php?sub=$1
Сложность и путаница у меня в том, что в данный момент у меня работает преобразование слешей для ЧПУ и работает оно таким образом
(Нажмите, чтобы показать/скрыть)

Кто что может подсказать?

Оффлайн DnSL48

  • Активист
  • *
  • Сообщений: 286
    • Просмотр профиля
Re: mod_rewrite поддомены и чпу
« Ответ #1 : 11 Май 2010, 17:04:11 »
а в чем, собственно, проблема? сейчас преобразуется все, что не является файлом или директорией. Если надо перенаправлять поддомены, тогда можно посмотреть в сторону mod_alias
ArchLinux x86_64

Оффлайн Doka

  • Автор темы
  • Участник
  • *
  • Сообщений: 151
  • PHP developer (symfony, yii2)
    • Просмотр профиля
    • Создание сайтов в Нижнем Тагиле
Re: mod_rewrite поддомены и чпу
« Ответ #2 : 11 Май 2010, 17:14:19 »
Поддоменов как таковых не существует. в этом и проблема.
В идеале мне хочется чтоб было таким образом:
/index.php?do=$1&sub=$2
Только моих мозгов не хватает на данное действо

Оффлайн DnSL48

  • Активист
  • *
  • Сообщений: 286
    • Просмотр профиля
Re: mod_rewrite поддомены и чпу
« Ответ #3 : 11 Май 2010, 17:19:05 »
ServerName example.com
        ServerAlias *.example.com
        RewriteEngine On
        RewriteCond %{HTTP_HOST} ^example\.com$
        RewriteRule ^/(.*) /index.php?do=$1      [L]
        RewriteCond %{HTTP_HOST} ^((.*)\.)example\.com$
        RewriteRule ^/(.*) /index.php?do=$1&sub=%2       [L]
Что-то в этом роде.
Но это прописывается в виртуал-хостах. Просто в .htaccess прописать не получится
« Последнее редактирование: 11 Май 2010, 17:21:38 от DnSL48 »
ArchLinux x86_64

Оффлайн Doka

  • Автор темы
  • Участник
  • *
  • Сообщений: 151
  • PHP developer (symfony, yii2)
    • Просмотр профиля
    • Создание сайтов в Нижнем Тагиле
Re: mod_rewrite поддомены и чпу
« Ответ #4 : 11 Май 2010, 17:35:59 »
Не работает(

Вот вложил файл хоста
(Нажмите, чтобы показать/скрыть)
и .htaccess
(Нажмите, чтобы показать/скрыть)

Оффлайн vanish

  • Любитель
  • *
  • Сообщений: 70
  • Life Is Good
    • Просмотр профиля
Re: mod_rewrite поддомены и чпу
« Ответ #5 : 11 Май 2010, 17:36:38 »
ServerName example.com
        ServerAlias *.example.com
        RewriteEngine On
        RewriteCond %{HTTP_HOST} ^example\.com$
        RewriteRule ^/(.*) /index.php?do=$1      [L]
        RewriteCond %{HTTP_HOST} ^((.*)\.)example\.com$
        RewriteRule ^/(.*) /index.php?do=$1&sub=%2       [L]
Что-то в этом роде.
Но это прописывается в виртуал-хостах. Просто в .htaccess прописать не получится

А можно поинтересоваться почему же все таки нужно именно в вирт.хосте?
И почему не запуститься через .htaccess?
У меня чет запускается. Наверное я , что -то не правильно делаю

Оффлайн Doka

  • Автор темы
  • Участник
  • *
  • Сообщений: 151
  • PHP developer (symfony, yii2)
    • Просмотр профиля
    • Создание сайтов в Нижнем Тагиле
Re: mod_rewrite поддомены и чпу
« Ответ #6 : 11 Май 2010, 17:41:25 »
в виртхост главное прописать ServerName и ServerAlias. Остальное может находиться в .htaccess

Оффлайн DnSL48

  • Активист
  • *
  • Сообщений: 286
    • Просмотр профиля
Re: mod_rewrite поддомены и чпу
« Ответ #7 : 11 Май 2010, 18:58:20 »
А можно поинтересоваться почему же все таки нужно именно в вирт.хосте?
И почему не запуститься через .htaccess?
У меня чет запускается. Наверное я , что -то не правильно делаю
У тебя ServerAlias и ServerName прописан в .htaccess?

Не работает(
Апач нормально стартует? В логах есть что-нибудь по этому поводу?
ArchLinux x86_64

Оффлайн Doka

  • Автор темы
  • Участник
  • *
  • Сообщений: 151
  • PHP developer (symfony, yii2)
    • Просмотр профиля
    • Создание сайтов в Нижнем Тагиле
Re: mod_rewrite поддомены и чпу
« Ответ #8 : 11 Май 2010, 22:48:29 »
По логам rewrite понял что поддомены вообще не направляются в корневой каталог...
Что тут можно сделать? оО

Оффлайн unimix

  • Активист
  • *
  • Сообщений: 537
    • Просмотр профиля
Re: mod_rewrite поддомены и чпу
« Ответ #9 : 11 Май 2010, 23:06:43 »
А почему необходимо реализовать через mod-rewrite, а не через переменные окружения?

Оффлайн Doka

  • Автор темы
  • Участник
  • *
  • Сообщений: 151
  • PHP developer (symfony, yii2)
    • Просмотр профиля
    • Создание сайтов в Нижнем Тагиле
Re: mod_rewrite поддомены и чпу
« Ответ #10 : 11 Май 2010, 23:13:00 »
а потому что я иначе не знаю(
 Расскажи плз поподробней как через них сделать?
--
понял. Вы предлагает оперировать с HTTP_HOST. Но одна из проблем все равно остается: как направить все поддомены в одну папку?
« Последнее редактирование: 11 Май 2010, 23:15:24 от Doka »

Оффлайн unimix

  • Активист
  • *
  • Сообщений: 537
    • Просмотр профиля
Re: mod_rewrite поддомены и чпу
« Ответ #11 : 11 Май 2010, 23:46:36 »
как направить все поддомены в одну папку?

Этим Apache должен заниматься если, конечно поддомены не находятся на другом сервере.

В Apache пишешь главный домен в "ServerName" и какие нужны домены/поддомены в "ServerAlias". Алиасы виртуального сервера -- это, если можно так сказать, псевдонимы, а сервер один и файлы его располагаются в "DocumentRoot". То есть, для всех таких доменных имен одна коренная директория со скриптами. Можно, конечно, насоздавать и множество виртуальных серверов с указанием "DocumentRoot" на одну директорию.

Далее, у тебя есть главный скрипт "index.php", на него и можешь с помощью mod_rewrite все, что нужно сваливать. Например, запросы несуществующих ресурсов:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

А в самом скрипте index.php разбирать ситуацию в зависимости от $_SERVER.

Оффлайн Doka

  • Автор темы
  • Участник
  • *
  • Сообщений: 151
  • PHP developer (symfony, yii2)
    • Просмотр профиля
    • Создание сайтов в Нижнем Тагиле
Re: mod_rewrite поддомены и чпу
« Ответ #12 : 11 Май 2010, 23:50:49 »
Я так это и понял) только не могу понять:
1 - я работаю на домашнем компе
2 - в файле hosts прописано 127.0.1.1      domen.zona      www.domen.zona
3 - в конфиге вирт.хоста прописано
     ServerName    domen.zona
     ServerAlias   *.domen.zona


И поидее (как я думаю) все поддоменны должны отправляться на domen.zona, чего в реальности не происходит (404)
а domen.zona и www.domen.zona работают нормально.
Прописывание в hosts
127.0.1.1       domen.zona    www.domen.zona     *.domen.zona
тоже не дает никаких результатов
« Последнее редактирование: 11 Май 2010, 23:54:06 от Doka »

Оффлайн Mam(O)n

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: mod_rewrite поддомены и чпу
« Ответ #13 : 12 Май 2010, 00:08:31 »
И поидее (как я думаю) все поддоменны должны отправляться на domen.zona, чего в реальности не происходит (404)
Давай отделим мух от котлет. Система резолвинга (/etc/hosts и DNS) и апачевские виртуалхосты разные вещи, но одно зависит от другого. Если глубоко не вдаваться в детали, то схему работы можно обрисовать так.  При запросе страницы веб-браузер вызывает системную функцию преобразования имени в IP адрес, которая сначала (в зависимости от настроек) смотрит в локальный файл /etc/hosts и если там нет соответствующей записи, то делает запрос на прописанные в системе DNS сервера. Если адрес получен, то на IP адрес веб-сервера (в нашем случае апач) посылается http запрос, где в заголовке прописано поле host: в котором указан доменный адрес, который был в URL, на основе которого апач определяет, к какому виртуалхосту относится запрос.

Прописывание в hosts
127.0.1.1       domen.zona    www.domen.zona     *.domen.zona
тоже не дает никаких результатов
Для файла /etc/hosts подстановка * не будет работать. Это примитивная локальная альтернатива (прародитель) системы DNS, где такое не прокатит. См. man hosts. Используй более серьёзные реализации DNS.
« Последнее редактирование: 12 Май 2010, 01:28:43 от Mam(O)n »

Оффлайн Doka

  • Автор темы
  • Участник
  • *
  • Сообщений: 151
  • PHP developer (symfony, yii2)
    • Просмотр профиля
    • Создание сайтов в Нижнем Тагиле
Re: mod_rewrite поддомены и чпу
« Ответ #14 : 12 Май 2010, 00:22:44 »
Благодарю за разъяснение  :coolsmiley:

 

Страница сгенерирована за 0.062 секунд. Запросов: 23.