2017-05-05 137 views
1

我想爲我維護的網站創建一個ReWriteEngine規則。該網站有兩個域名變體.co.uk.com。我想要做的是.com重寫爲.co.uk,但也總是確保www.部分是在開始。儘管如此,我卻遇到了反向和不可預測的行爲。請參閱此表以瞭解所需的重寫以及我實際獲得的內容。 ReWriteCond和ReWriteRule是基於另一個關於類似問題的Stackoverflow問題。ReWriteEngine做相反的東西

| URL ENTERED | URL REWRITTEN | DESIRED REWRITE | SUCCESS | 
|-------------------|-------------------|-------------------|---------| 
| www.example.com | example.co.uk  | www.example.co.uk | No  | 
| example.com  | www.example.co.uk | www.example.co.uk | Yes  | 
| example.co.uk  | example.co.uk  | www.example.co.uk | No  | 
| www.example.co.uk | www.example.co.uk | www.example.co.uk | Yes  | 

重寫規則&條件

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

@馬丁感謝您的支持!我甚至沒有注意到。它也顯然是使用舊地址,因爲我現在已經切換到.design頂級域名。這是一個完整的其他傳奇故事,因爲我的託管公司的一名技術支持成員已經打破了ReWrites的思路,試圖提供幫助。 – jskrwyk

回答

1

您可能會看到一個緩存重定向,如果你正在因爲你的當前指令不執行此操作重定向到example.co.uk(無www)。不過,如果你想重定向非www和www.example.com那麼您將需要兩個條件:

RewriteCond %{HTTP_HOST} ^www\.example\.com [NC,OR] 
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteRule (.*) http://www.example.co.uk/$1 [R=301,L] 

所以,如果你通過www.example.com主機名不開始www.然後重定向訪問。 (example.com由第2條件抓住了。)

移除了RewriteRuleNC標誌,因爲它是多餘的這裏(.*匹配的一切,無論大小寫)。

清除測試之前,你的瀏覽器緩存。只有當您確定它工作正常時,才能將R=302更改爲R=301

+0

這不是緩存問題,因爲清除緩存沒有改變,但您的規則修復了它 - 謝謝! – jskrwyk

+0

好吧,如果第一個例子不是緩存問題,那麼「別的東西」正在導致它 - 它不是你發佈的指令。 – MrWhite

+1

它可能是一些與CMS捆綁在一起的「安全」重寫,雖然它們似乎都只在tld之後重寫。它也可能是東道主;我在與他們一起託管的另一個站點上遇到了一些問題,他們的一個低級技術支持人員在一個單獨但相關的問題之後通過添加重寫規則來嘗試提供幫助,但他們搞砸了。 – jskrwyk