2012-02-08 139 views
-1

我有困難構建一個非www到www永久重定向。以下是我需要滿足的條件...Apache重寫:*完全*非www到www永久重定向

1.)多域支持(多個網站域指向服務器上的同一目錄,其自己的專用數據庫副本)。這意味着使用%{HTTP_HOST}而不是一個靜態域名。

2.)全部可能的路徑(或至少符合標準的路徑)需要重定向;這意味着目錄,HTTP查詢等。

3.)我使用共享主機,因此我只能訪問.htaccess文件。

這裏是我的工作現在...

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

會很樂意做任何澄清,以及贊成票都接受一個工作的答案。

  • 我正在測試瀏覽器緩存禁用,以防萬一。

  • 我在測試過程中刪除了其他語法,以查看自己的答案是什麼。

+0

什麼不適用於您的代碼段? – 2012-02-08 19:31:00

+0

我不太瞭解HTTP/1.1,但是301代碼對每個請求都有效?我認爲RFC至少說,對於GET或HEAD以外的任何請求,客戶端應該提示用戶重定向。見[這裏](http://tools.ietf.org/html/rfc2616#section-10.3.2)。 – dreamlax 2012-02-08 19:32:11

+0

http://example.com/blog/不會重定向,但是http://example.com/不會。 – John 2012-02-08 19:32:39

回答

3

在這裏你去:

RewriteCond %{HTTP_HOST} !^www\. 
RewriteCond %{HTTPS}s on(s)| 
RewriteRule^http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

它也將保持URI方案。

+0

雖然這並沒有奏效。 – John 2012-02-08 19:36:53

+0

您正在使用強制性的'RewriteEngine on',對吧? – Gumbo 2012-02-08 19:42:18

+0

當然,雖然總是要求澄清! – John 2012-02-08 19:46:58

0

在這裏,這對我的作品(我的域名)

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

我看到的唯一的區別是在重寫規則匹配模式。

+0

這一個很好,但是Gumbo確保URI方案也保持不變(所以你沒有從HTTPS重定向到HTTP)。 – dreamlax 2012-02-08 19:36:13