2011-11-24 65 views
0

我們有一個多子域網站,根據子域文本生成動態cotent。但是,如果將www附加到子域,則它不起作用。由於有些用戶習慣在每個網址前添加www,我們希望通過網址重寫來修復它。將www的任何子域的URL重寫爲相應的沒有www的子域

編輯

我有這麼遠:

RewriteEngine on 
RewriteCond %{HTTP_HOST} !^www\.subdominio\.dev [NC] 
RewriteCond %{HTTP_HOST} !^$ 
RewriteCond %{http_host} ^www\.([^\.]+)\.subdominio\.dev [NC] 
RewriteRule ^(.*) http://%1.subdominio.dev$1 [R=301,QSA,NC] 

令人驚訝。它適用於我的一個測試子域,但不適用於其他域:

www.otro-mas.subdominio.dev被重定向到otro-mas.subdomino.dev(帶和不帶URI,如/index.html )。正如預期的那樣。

但www.ono.subdominio.dev正在進入無限重定向。就像這樣:

http://www.ono.subdominio.dev/ono.subdominio.dev//ono.subdominio.dev//ono ...

爲什麼不重寫主機?

+0

可能是我沒有花哨的RewriteRule點? – esclapes

+0

嘗試重寫規則^(。*)$ http://%1 \ .domain \ .com/$ 1 [R = 301,L] – Cyclonecode

+0

投票遷移到webmasters.stackexchange.com。即使這裏的人們知道答案,問答很可能在那裏更有價值,更多的話題。 –

回答

0

試試這個:

RewriteCond %{HTTP_HOST} ^www\.([a-zA-Z-_]+)\.domain\.com [NC] 
RewriteRule ^(.*)$ http://%1\.domain\.com/$1 [R=301,NC,QSA,L] 

你可能忘了QSAL指令(在Apache mod_rewrite documentation的解釋搜索)。

+0

感謝您的回覆。我沒有看到對應用QSA有什麼影響,也不確定L是否有意義,因爲這將轉到具有自己重定向的drupal安裝。 – esclapes

+0

你應該已經在你的答案中精簡了它:它是Drupal :)。是的,「LAST」是有道理的,因爲當我使用像這樣的重定向時,它總是一個真正的重定向,我總是希望它直接重定向,而不需要做任何進一步的事情(=只要它可以不想處理URL以'www'開頭,對吧?)。 –

+0

嗨,謝謝你的幫助。你可能是對的,我不太瞭解重定向,我不確定drupal是否依賴它們。關於www,我只想處理具有額外www級別的子域。 – esclapes

0

它確實有效。

RewriteEngine on 
RewriteCond %{HTTP_HOST} !^www\.subdominio\.dev [NC] 
RewriteCond %{HTTP_HOST} !^$ 
RewriteCond %{http_host} ^www\.([^\.]+)\.subdominio\.dev [NC] 
RewriteRule ^(.*) http://%1.subdominio.dev$1 [R=301,QSA,NC] 

我的瀏覽器中的緩存存在一些問題。

+0

該死的。這就是爲什麼我告訴每一天*所有*我的同事在隱身模式下使用Chrome瀏覽器:添加這些選項:'--start-maximized --incognito'並且您確信**當您退出Chrome時,一切都會被遺忘*包括DNS *,對於擁有自己的DNS「緩存」(甚至在私人模式下)的Firefox,情況並非如此。 –