Apache虚拟主机和mod_rewrite冲突

时间:2009-04-28 16:03:54

标签: mod-rewrite apache2 virtualhost

我一直在搜索网络,所以我无法绕过或解决这个问题。

我们有一堆子域和一些专用服务器。一台服务器作为问题跟踪和登陆页面执行双重三重任务。问题是通配符登录页面有时不会将您带到正确的虚拟主机页面。我一直在看通配符,但它们似乎特别宽泛。

我们的方案如下:

- 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中做些什么。在virtualhosts配置文件或mod_rewrite文件中。

2 个答案:

答案 0 :(得分: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.com以及www.askia.com以外的主机。因此,每个请求都应转到dev.askia.comwww.askia.com

答案 1 :(得分: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