2014-05-20 101 views
0

我有一個在tomcat(6)前面的apache(2.4.6)服務器。我希望所有到www.domain.com的請求都會永久重定向到domain.com。我目前的conf是:apache2不能重定向非www到虛擬主機內的www

<VirtualHost *:80> 
ServerName www.domain.ma 
RewriteEngine on 
RewriteCond %{HTTP_HOST} ^domain\.ma 
RewriteRule ^(.*)$ http://www.domain.ma/$1 [R=permanent,L] 

DocumentRoot /var/www/domain.ma/htdocs 

ProxyRequests Off 
ProxyPreserveHost On 

ProxyPassReverseCookiePath /portal/
ProxyPass /portal/index.htm http://127.0.0.1:8080/portal/index.htm 

ProxyPass /images ! 
ExpiresByType image/* A2592000 

</VirtualHost> 

當我要求http://domain.ma/,Apache不重定向到http://www.domain.ma/,誰能告訴我什麼是錯誤的,我的conf?

+0

請注意,你的正則表達式HTTP_HOST是不太正確的。如果有人設法將'domain.masite.example.com'指向你的服務器,你仍然會重定向,因爲你只匹配主機名的開頭,而不是整個字符串。 –

回答

0

試試這個:

ServerName domain.ma 
ServerAlias www.domain.ma 

RewriteEngine on 
RewriteBase/
RewriteCond %{HTTP_HOST} . 
RewriteCond %{HTTP_HOST} !^www\.domain\.ma [NC] 
RewriteRule (.*) http://www.domain.ma/$1 [R=301,L] 
+0

它工作:)但爲什麼你使用ServerAlias? – user973296

+0

「ist」解決方案我有一個小問題:http://domain.ma/path被重定向到http://domain.ma//path:雙斜槓。我通過在RewriteRule(。*)http://www.domain.ma$1 [R = 301,L中替換RewriteRule(。*)http://www.domain.ma/$1 [R = 301,L] ] – user973296

+0

@ user973296沒有** ServerAlias **,Apache不會知道這個** VirtualHost **適用於www.domain.ma和domain.ma – ist