Nginx 301 重定向 redirect 域名配置

Nginx 301 redirect

以搜尋引擎來看網址,有帶 www 和不帶 www 的網址是不同的兩個 URL,當它們指向同一個網站時,會讓搜尋引擎不知應該選擇哪一個 URL 作為主要的網址。

若 WordPress 網站可以進入管理後台,在 WordPress Address (URL) 和 Site Address (URL) 打入網址,決定要不要帶 www 網址。

我剛好代管一個 Joomla 網站,後台就沒有設置的選項,就需要從主機採用 301 重定向 (redirect) 進行 URL 標準化設置。

Advertisement

Nginx 301 重定向

先在 DNS 設置好域名的 A 紀錄及 CNAME,我要定義域名原本是 example.com 重定向為 www.example.com 網址,然後在 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;
}
........

HTTP 301 redirect HTTPS

另外補上其他重定向的配置,http 301 重定向到 https 配置:

域名加上 SSL 證書後,nginx.conf 一定不要忘記加上這個 301 redirect 配置。
server {
	listen 80;
        listen [::]:80;
	server_name www.example.com example.com;
	return 301 https://www.example.com$request_uri;
}

301 重定向新網址

(aaa.example.com 301 重定向新網址 bbb.example.com)

rewrite ^(.*)$  https://bbb.example.com permanent;

最後不要忘記重啟 Nginx

nginx -t && service nginx restart

2017/09/12 補充:

接手一個 WordPress 已經建置好了搬遷主機的案子,一般正常的 WordPress 後台就可以設定域名要不要有 www,但是很多外掛因素會造成域名轉向 (redirect) 的問題。

所以只能從主機端來執行,將配置寫入 etc / nginx / sites-available / domain.com

例如:不帶 www 域名 301 轉址 (redirect) 到有 www 的域名

root /var/www/domain.com/htdocs;
if ($host != www.domain.com) {  return 301 $scheme://www.domain.com$request_uri;  }

例如:有帶 www 域名 301 轉址 (redirect) 到沒有 www 的域名

root /var/www/domain.com/htdocs;
if ($host != domain.com) {  return 301 $scheme://domain.com$request_uri;  }

Nginx 重啟後,域名有沒有 www 就會由主機端的配置來控制了。

Apache 系統

www URL 重定向到非 no-www

可以通過修改網站的 .htaccess 文件將 www.yourdomain.com 域名的所有請求重定向到 yourdomain.com。

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

另一個是非 no-www URL 重定向到 www

可以通過修改網站的 .htaccess 文件將 yourdomain.com 域名的所有請求重定向到 www.yourdomain.com。

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

參考文件:

Nginx 官方 Rewrite 文檔

Featured Photo 攝影師:Snapwire,連結:Pexels

Follow me

yungke

視咖啡如命的癮君子,沒有厲害的技術,只會小打小鬧的電腦工程師,其實是個打雜小弟,修電燈、水管也都是我的工作。
yungke
Follow me
Advertisement

Follow Me

查看本文
喜愛 Like 點擊數!!
Back to top