Apache-2.2

如何使用 Apache2 將我的網站從非 www 重定向到 WWW?

  • October 31, 2013

我目前正在嘗試設置我的個人網頁。

我正在使用 VPS 並手動安裝了 Wordpress,一切似乎都正常工作……除非我訪問我網站的非 www 版本,它會出現一個找不到頁面。

www.andrewrockefeller.com <–有效

andrewrockefeller.com <– 沒有(我想將其重定向到 www.andrewrockefeller.com

我已經嘗試將 RewriteEngine 功能添加到我的 .htaccess 中,但這不起作用。

我還嘗試將“投票最多”的方法添加到我的預設文件中(apache2.conf 從中提取:

&lt;VirtualHost *&gt;
 ServerName andrewrockefeller.com
 Redirect 301 / http://www.andrewrockefeller.com/
&lt;/VirtualHost&gt;

看到有多少人能夠使上述工作正常進行,我可能還缺少其他東西來使其發揮作用嗎?

感謝您的時間!

編輯:我的 .htaccess 文件如下:

# BEGIN WordPress
&lt;IfModule mod_rewrite.c&gt;
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
&lt;/IfModule&gt;
# END WordPress

#Wordpress 部分是在我將設置從 ?p=1(醜陋的連結)更改為 prettylinks 時自動創建的。我在這裡找到的任何建議的解決方案我都嘗試過並重新啟動了 apache2,但它沒有奏效。

問題 1:不正確的 DNS

您沒有 www.andrewrockefeller.com 的 A 或 CNAME 記錄。因此,瀏覽器無法將您的域名轉換為 IP 地址。

dig andrewrockefeller.com 

; &lt;&lt;&gt;&gt; DiG 9.3.6-P1-RedHat-9.3.6-20.P1.el5_8.2 &lt;&lt;&gt;&gt; andrewrockefeller.com
;; global options:  printcmd
;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 31887
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;andrewrockefeller.com.         IN      A

;; AUTHORITY SECTION:
andrewrockefeller.com.  1739    IN      SOA     dns226.a.register.com. root.register.com. 2013082003 28800 7200 604800 14400

;; Query time: 22 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Thu Oct 31 12:44:47 2013
;; MSG SIZE  rcvd: 98

看來您的域已在 Register.com 註冊。在他們的門戶網站上,您需要為

andrewrockefeller.com -&gt; 76.164.206.80

添加此 A 記錄後,您的 domain.com 版本應該會解析。

問題 2:規範域名

我認為 Wordpress 會正確重定向域,但為了確保這一點,你最好強制任何與你想要的東西不匹配的東西。

參考:http ://wiki.apache.org/httpd/CanonicalHostNames

我更喜歡使用 mod_rewrite 和這種方法:

# And for a site running on port 80
RewriteCond %{HTTP_HOST}   !^example\.com [NC]
RewriteCond %{HTTP_HOST}   !=""
RewriteRule ^/?(.*)         http://example.com/$1 [L,R=301]

這基本上說如果域不匹配 example.com 重定向到 example.com。如果您想在 www.example.com 上進行標準化,您可以相應地修改:

# And for a site running on port 80
RewriteCond %{HTTP_HOST}   !^www\.example\.com [NC]
RewriteCond %{HTTP_HOST}   !=""
RewriteRule ^/?(.*)         http://www\.example.com/$1 [L,R=301]

引用自:https://serverfault.com/questions/549995