如何使用 Apache2 将我的网站从非 www 重定向到 WWW?

如何使用 Apache2 将我的网站从非 www 重定向到 WWW?

我目前正在尝试建立我的个人网页。

我正在使用 VPS 并手动安装了 Wordpress,一切似乎都正常......但当我访问我的网站的非 www 版本时,就会出现找不到页面的情况。

www.andrewrockefeller.com<-- 作品

andrewrockefeller.com<-- 没有(我想将其重定向到 www.andrewrockefeller.com)

我曾尝试将 RewriteEngine 功能添加到我的 .htaccess,但是没有效果。

我也尝试过将“最多投票”方法添加到我的默认文件(apache2.conf 从中提取:

<VirtualHost *>
  ServerName andrewrockefeller.com
  Redirect 301 / http://www.andrewrockefeller.com/
</VirtualHost>

看到有多少人能够完成上述工作,我是否还缺少了其他什么东西才能使其发挥作用?

感谢您的时间!

编辑:我的.htaccess 文件如下:

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

当我将设置从 ?p=1(丑陋链接)更改为 prettylinks 时,#Wordpress 部分会自动创建。我尝试了这里找到的所有建议的解决方案,并重新启动了 apache2,但都没有用。

答案1

问题 1:DNS 不正确

您没有 www.andrewrockefeller.com 的 A 或 CNAME 记录。因此,浏览器无法将您的域名转换为 IP 地址。

dig andrewrockefeller.com 

; <<>> DiG 9.3.6-P1-RedHat-9.3.6-20.P1.el5_8.2 <<>> andrewrockefeller.com
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- 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 注册。在他们的门户网站上,您需要添加一条 A 记录

andrewrockefeller.com -> 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]

答案2

答案就在 DNS 中。您的域名注册商 register.com 应该会提供一个选项来管理您的 DNS 条目。在控制面板的该部分中,可能会有一个选项来包含 www. 子域。

如果没有,您可以自行创建它,方法是将其添加为指向主机根文件夹的子域。

看: http://help.register.com/app/answers/detail/a_id/2882

答案3

<If "%{HTTP_HOST} != 'www.example.com'">
    Redirect / http://www.example.com/
</If>

就像这里在规范主机名下解释的那样 Apache 文档重新映射/重写

相关内容