LINUX.ORG.RU

Перейти на домен, если нет заданного субдомена

 , , ,


0

2

Здравствуйте! Стоит Ubuntu 12.04, есть несколько доменов, у некоторых есть субдомены. Задача: если в строку браузера ввели отсутствующий субдомен, чтобы он переходил на домен этого субдомена.

В Файл /etc/apache2/httpd.conf вставил следующее:


<Directory />
Options Includes -Indexes FollowSymLinks
AllowOverride All
Order allow,deny
allow from all
ErrorDocument 404 /404.htm

RewriteEngine On
RewriteCond %{HTTP_HOST} !^%{SERVER_NAME}%{REQUEST_URI} [NC]
RewriteRule ^(.*)$ http://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

</Directory>

Не работает. Идёт редирект на домен, который стоит в файле «000-default». Подскажите, пожалуйста, в чём дело.



Последнее исправление: saliery (всего исправлений: 1)

{SERVER_NAME} – так как ты его не задаешь тут явно, а настраиваешь глобально для всего апача, то кидает на дефолтный (первый по алфавиту в списке vhost – потому и имя у него на три нуля, всегда будет спереди). Т.е. {SERVER_NAME} вообще просто указывает ServerName который задан в конфиге – для отдельного конфига для хоста это будет то что там указано, а глобально просто дефолт.

Я бы просто для каждого vhost написал эти три строчки.

mandala ★★★★★
()
Ответ на: комментарий от anonymous

Ему надо раскидывать по разным доменам, т.е. можно не ставя каждый раз конкретный домен накидать этот редирект для каждого хоста отдельно. И всё.

mandala ★★★★★
()
Ответ на: комментарий от mandala

Если нет записи sub.domain.com или *.domain.com, то запрос к sub.domain.com (несуществующему в конфиге) уйдет на дефолтный.

anonymous
()
Ответ на: комментарий от mandala

Указал для домена конкретно, не работает.

NameVirtualHost ~IP-адрес~:80

<VirtualHost domain.ru:80>
    Options -Indexes
    ServerName domain.ru
    ServerAlias domain.ru www.domain.ru
    DocumentRoot /var/www/domain.ru/htdocs

    RewriteEngine On
    RewriteCond %{HTTP_HOST} !^domain.ru [NC]
    RewriteRule ^(.*)$ http://domain.ru [R=301,L]
</VirtualHost>

Всё равно на дефолтный идёт. Как будто ничего и не изменилось.

saliery
() автор топика
Ответ на: комментарий от mandala

Задача такая: например, у доменов (не у всех) есть ещё субдомены. При вводе действующего субдомена надо попадать на этот субдомен, а если ввели неправильно, то попадаем на текущий домен, а не а тот, который по дефолту стоит. Идея простая, но реализовать как - пока не понял. :(

saliery
() автор топика
Ответ на: комментарий от saliery

Всё равно на дефолтный идёт.

Странно. Редиректов ни где не осталось от предыдущих опытов? Апач сам нормально перезапустился?

mandala ★★★★★
()
Ответ на: комментарий от mandala

Заработало:

в папке sites-enabled сделал так: 000-default (самый первый):

NameVirtualHost ~my_ip~:80

<VirtualHost domain-default.ru:80>

   ServerAdmin webmaster@localhost
   DocumentRoot /var/www/domain-default.ru/htdocs

   <Directory />
       Options FollowSymLinks
       AllowOverride None
   </Directory>

   <Directory /var/www/domain-default.ru/htdocs>
       Allow from all
       Options +Indexes
       AllowOverride all
   </Directory>

   ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

   <Directory "/usr/lib/cgi-bin">
       AllowOverride None
       Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
       Order allow,deny
       Allow from all
   </Directory>

   ErrorLog ${APACHE_LOG_DIR}/error.log

   # Possible values include: debug, info, notice, warn, error, crit,
   # alert, emerg.
   LogLevel warn

   CustomLog ${APACHE_LOG_DIR}/access.log combined

   Alias /doc/ "/usr/share/doc/"

   <Directory "/usr/share/doc/">
       Options Indexes MultiViews FollowSymLinks
       AllowOverride None
       Order deny,allow
       Deny from all
       Allow from 127.0.0.0/255.0.0.0 ::1/128
   </Directory>

</VirtualHost>

1_sub1.domain.ru:

NameVirtualHost ~my_ip~:80

<VirtualHost sub1.domain.ru:80>
   Options -Indexes
   ServerName sub1.domain.ru
   ServerAlias sub1.domain.ru www.sub1.domain.ru
   DocumentRoot /var/www/sub1.domain.ru/htdocs
</VirtualHost>

2_domain.ru:

NameVirtualHost ~my_ip~:80

<VirtualHost domain.ru:80>
   RewriteEngine On
   RewriteCond %{HTTP_HOST} !^domain.ru [NC]
   RewriteRule ^(.*)$ http://domain.ru [R=301,L]

   Options -Indexes
   ServerName domain.ru
   ServerAlias domain.ru *.domain.ru
   DocumentRoot /var/www/domain.ru/htdocs
</VirtualHost>

очерёдность файлов следующая (играет значение!): 1. 000-default 2. 1_sub1.domain.ru 3. 2_domain.ru

saliery
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.