2009-04-28 220 views
2

我一直在淘网,所以我无法绕过或通过这个问题。Apache虚拟主机和mod_rewrite冲突

我们有一堆子域和一些专用服务器。一台服务器在问题跟踪和着陆页面上执行双重任务。问题是通配符着陆页有时并未将您带到正确的虚拟主机页面。我一直在看通配符,但看起来特别宽泛。

我们的情景是这样的:

- www.askia.com是主着陆场。一个不存在的(通配符)子域名应该总是在这里登陆。
- dev.askia.com是技术支持和问题网站。它有一些https的mod_rewrites。这花了我一段时间,但我得到它的工作,我宁愿不打破它。
- www.askia.fr是我们的法国网站。而不是带你去www.askia.com它会带你到dev.askia.com。
- www.askia.co.uk应该带你到www.askia.com,但它去dev.askia.com

我不能完全肯定,我应该尝试修复解决方案。我应该在CNAME中做些什么?在虚拟主机配置文件或mod_rewrite文件中。

+0

投票近距离上serverfault.com属于 - 它在灰色地带,但我想它有更多的是与系统配置和apache的设置不是编程... – 2009-04-28 16:06:56

回答

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.comwww.askia.com。第二条规则将请求重定向到除www.askia.comdev.askia.comwww.askia.com之外的主机。所以每个请求应该去dev.askia.comwww.askia.com

+0

感谢我给这一枪。如果我添加其他子域,我需要将它们添加到rewreitecond? – 2009-04-29 09:39:39

+0

是的。我的例子只允许`dev。...`和`www \。...`。与另一个开始的主机名将被重定向到www.askia.com。 – Gumbo 2009-05-04 16:54:37

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