Skip to content

Nginx 和 Apache 如何域名配置 301 redirect www 到 non-www

Last updated on 2021 年 6 月 29 日

以搜尋引擎來看網址,有 www 和沒有 www 的網址是不同的兩個的網址。因此,當它們同時都指向同一個網站時,儘管是可以的,但是這會讓搜尋引擎不知應該選擇哪一個 URL 作為主要的網址,所以會影響 SEO ,因為常常忘記要怎麼設定,所以這邊紀錄一下。

Nginx

301 www 重定向 non-www

先在 DNS 設置好域名的 A 紀錄及 CNAME,至於怎麼設定不在這篇文章的範圍內,我這邊就先不多說了。假設,我要定義域名原本是 www.example.com 重定向為example.com 網址,然後原本在 nginx/sites-available/example.conf 文件配置應該會是如下:

server {
    listen 80;
    server_name example.com;
    root /var/www/example.com;
}

我們只需要在配置文件的最下面添加以下配置,

server {
    listen 80;
    server_name www.example.com;
    return 301 $scheme://example.com$request_uri;
}

或者是也可以這樣寫:

server {
    listen 80;
    server_name www.example.com example.com;
    if ($host != 'example.com' ) {
        rewrite ^/(.*)$ http://example.com/$1 permanent;
    }
    .....
}

最後,記得重新啟動 Nginx ,輸入:

nginx -t && service nginx restart

301 non-www 重定向 www

一樣都是在 nginx/sites-available/example.conf 文件配置下作修改,原先應該會是如下:

server {
    listen 80;
    server_name www.example.com;
    root /var/www/example.com;
}

我們只需要在配置文件的最下面添加以下配置,

server {
    listen 80;
    server_name example.com;
    return 301 $scheme://www.example.com$request_uri;
}

或者是也可以這樣寫:

server {
    listen 80;
    server_name www.example.com example.com;
    if ($host != 'www.example.com' ) {
        rewrite ^/(.*)$ http://www.example.com/$1 permanent;
    }
    .....
}

最後,也不要忘記重新啟動 Nginx 了!

Apache

301 www 重定向 non-www

可以通過修改網站的 .htaccess 來達成這個目的,

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

301 non-www 重定向 www

也是可以直接通過修改網站的 .htaccess 文件達成目的,

RewriteEngine On
RewriteCond %{HTTP_HOST} ^yourdomain.com [NC]
RewriteRule ^(.*)$ http://www.yourdomain.com/$1 [L,R=301]
Published in筆記

Be First to Comment

Leave a Reply

Your email address will not be published. Required fields are marked *