2013-09-27 62 views
1

是否有可能有一個通用/多域 httpd.conf行,將任何非www請求重定向到它的www等價物?*通用* httpd.conf重定向非www到www

通過泛型,我的意思是不依賴硬編碼的域名,即。

RewriteEngine On 
RewriteBase/
RewriteCond %{HTTP_HOST} ^yourdomain.com [NC] 
RewriteRule ^(.*)$ http://www.yourdomain.com/$1 [L,R=301] 

我真的不想修改httpd.conf文件每次我有另一個網站添加/從我的服務器刪除時,ESP。該網站是動態添加/刪除的!

回答

3

mod_rewrite documentation有您需要的所有信息,但有很多要閱讀。有兩個部分是你想要的:首先,你需要匹配任何不以www.開頭的域;那麼,您需要將www.添加到當前URL。

在第一部分,有這個(同時適用於RewriteCondRewriteRule):

你可以用一個前綴的模式串「!」字符(感嘆號)來指定不匹配的模式。

所以「主機名不會開始www。」可以這樣進行測試:

RewriteCond %{HTTP_HOST} !^www\. [NC] 

對於第二部分,有這樣的:

除了純文本,該Substition字符串可以包括[...]服務器變量作爲規則條件測試字符串(%{VARNAME})

所以實際就進行了重定向一般是這樣的:

RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301] 

順便說一句,它也可以做相反(重定向一切www.),因爲RewriteRule替代也可以使用此:

反向引用(%N),最後匹配的RewriteCond模式

所以,你可以以後的www.在主機捕捉一切,並用其作爲規則的目標:

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

非常好,非常感謝你的男人,我的帽子給你! – TheDude