Виртуальные хосты Apache и конфликты mod_rewrite

Я прочесывал сеть и ТАК, и я не могу обойти или решить эту проблему.

У нас есть куча поддоменов и несколько выделенных серверов. Один сервер выполняет двойную и тройную функцию: отслеживание проблем и целевая страница. Проблема в том, что целевая страница с подстановочными знаками иногда не приводит вас на правильную страницу виртуального хоста. Я смотрел на подстановочные знаки, но они кажутся особенно широкими.

Наш сценарий следующий:

-www.askia.com – основной лендинг. Несуществующий (подстановочный) поддомен всегда должен размещаться здесь.
-dev.askia.com – это сайт технической поддержки и проблем. У него есть несколько mod_rewrites для https. Мне потребовалось некоторое время, но я заставил его работать, и я не хотел бы его ломать.
-www.askia.fr — это наш французский сайт. Вместо того, чтобы перейти на www.askia.com, вы попадете на сайт dev.askia.com.
- www.askia.co.uk должен привести вас на www.askia.com, но ведет на dev.askia.com

Я не совсем уверен, где я должен пытаться исправить решение. Должен ли я что-то сделать в файле CNAME. В файле конфигурации virtualhosts или в файле mod_rewrite.


person Joe Chin    schedule 28.04.2009    source источник
comment
Голосование за то, что принадлежит на serverfault.com - это в серой зоне, но я думаю, что это больше связано с конфигурацией системы и настройкой apache, чем с программированием...   -  person Adam Davis    schedule 28.04.2009


Ответы (2)


Попробуйте эти правила:

RewriteCond %{HTTP_HOST} ^dev\.
RewriteCond %{HTTP_HOST} !^dev\.askia\.com$
RewriteRule ^ http://dev.askia.com%{REQUEST_URI} [L,R=301]

RewriteCond %{HTTP_HOST} !^www\.askia\.com$
RewriteCond %{HTTP_HOST} !^dev\.askia\.com$
RewriteRule ^ http://www.askia.com%{REQUEST_URI} [L,R=301]

Первое правило перенаправляет каждый запрос на хост, начинающийся с dev., но не с dev.askia.com на www.askia.com. И второе правило перенаправляет запросы на хост, отличный от www.askia.com и dev.askia.com на www.askia.com. Таким образом, каждый запрос должен идти либо к dev.askia.com, либо к www.askia.com.

person Gumbo    schedule 28.04.2009
comment
спасибо, я попробую. Если я добавлю другие поддомены, мне нужно будет добавить их в перезаписи? - person Joe Chin; 29.04.2009
comment
Да. В моем примере разрешены только dev.… и www\.…. Имена хостов с другим началом будут перенаправлены на www.askia.com. - person Gumbo; 04.05.2009

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

#default vhost
# any non-matches will land here

<VirtualHost  _default_:80>
ServerName www.askia.com:80
DocumentRoot /path/to/site

ErrorLog /path/ti/sites/logs/error_log

</VirtualHost>


# vhost #2 

<VirtualHost  _dev_Site_:443>
ServerName dev.askia.com:443
DocumentRoot /path/to/dev/site

ErrorLog /path/to/dev/sites/logs/error_log

#ssl details
SSLEngine on
SSLCipherSuite HIGH:MEDIUM
SSLCertificateFile /location/securti.crt
SSLCertificateKeyFile /location/securti.key


#any rewrite rules to apply only to this (default) domain
# force SSL for instance..
RewriteRule .* - [F]
RewriteCond   %{SERVER_PORT}  !^443$
RewriteRule (.*) https://dev.askia.com/
</VirtualHost>

#etc, etc
person Eddie    schedule 04.05.2009
comment
Итак, как мне изменить этот порядок. Единственное, что у меня есть в apache2.conf, это ссылка на каталог с поддержкой сайтов. Я не могу найти ничего о том, как изменить этот порядок, кроме выгрузки сайта по умолчанию, что нецелесообразно. - person Joe Chin; 04.05.2009
comment
joe - какой бы домен ни был первым, он будет вашим уловом. Чтобы изменить это, просто сначала укажите другой. Я отредактировал свой исходный пост, включив в него пример конфигурации виртуального хоста, который делает www вашим значением по умолчанию и заставляет dev. быть ssl. - person Eddie; 05.05.2009