2009-04-28 225 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