2009-04-28 5 views
2

Я прочесываю сеть и ТАК, и я не могу обойти эту проблему или решить эту проблему.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.

+0

Голосование за приближены принадлежит на serverfault.com - это в серой зоне, но я думаю, это больше связано с конфигурацией системы и апача настройки, чем программирование ... –

ответ

1

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

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.

+0

спасибо Я дам это выстрел. Если я добавлю другие поддомены, мне нужно добавить их в rewreitecond? –

+0

Да. В моем примере разрешены только 'dev. ...' и 'www \. ...'. Имена узлов с другим началом будут перенаправлены на 'www.askia.com'. – Gumbo

1

При использовании виртуальных хостов в 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 
+0

Итак, как мне изменить этот порядок. Единственное, что у меня есть в apache2.conf, - это ссылка на каталог с поддержкой сайтов. Я не могу найти ничего о том, как изменить этот порядок, за исключением выгрузки сайта по умолчанию, который непрактичен. –

+0

joe - какой бы домен ни был первым, будет вашим уловом. Чтобы изменить это, сначала перечислите другой. Я отредактировал свое оригинальное сообщение, чтобы включить образец vhost config, который делает www вашим значением по умолчанию и заставляет dev. быть ssl. – Eddie