使用Nginx實(shí)現(xiàn)301跳轉(zhuǎn)至https的根域名示例代碼
基于 SEO 和安全性的考量,需要進(jìn)行 301 跳轉(zhuǎn),以下使用 Nginx 作通用處理
實(shí)現(xiàn)結(jié)果
需要將以下地址都統(tǒng)一跳轉(zhuǎn)到 https 的根域名 https://chanvinxiao.com
- http://chanvinxiao.com (不帶 www 的 http)
- http://www.chanvinxiao.com (帶 www 的 http)
- https://www.chanvinxiao.com (帶 www 的 https)
301 與 302 的區(qū)別
301 是永久重定向,302 是臨時(shí)跳轉(zhuǎn),主要的區(qū)別在于搜索引擎對(duì)此的對(duì)待方式
- 301:搜索引擎會(huì)將權(quán)重和 PR 值進(jìn)行轉(zhuǎn)移
- 302:搜索引擎不會(huì)進(jìn)行額外處理
現(xiàn)在是希望搜索引擎認(rèn)為原地址已經(jīng)不存在了,完全轉(zhuǎn)移到新地址,所以使用 301
http 跳轉(zhuǎn)到 https
最簡單的方法是直接在 sever 中返回一個(gè)重定向的地址,中間再加上 301 狀態(tài)碼(否則默認(rèn)為 302)
server { listen 80; return 301 https://$host$request_uri; }
- return 和 rewrite 都屬于 Nginx 的重寫模塊的指令,因?yàn)檫@里不需要對(duì)路徑進(jìn)行修改,所以用 return 會(huì)比較方便
- $host 和$request_uri 都是 Nginx http 模塊的嵌入變量,兩個(gè)變量合并一起就相當(dāng)于把請(qǐng)求的 http:// 去掉的結(jié)果
www 跳轉(zhuǎn)到根域名
這個(gè)只需在 https 中作處理,因?yàn)樗?http 都跳轉(zhuǎn)到 https 了
server { listen 443 ssl; server_name ~^(?<www>www\.)?(.+)$; if ( $www ) { return 301 https://$2$request_uri; } ...
- 這里利用了 server_name 的正則匹配功能,在其值前增加 ~ 即可啟用,支持 PCRE 語法
- 使用正則是為了確認(rèn)是否有前綴 www. 以及捕獲根域名,生成兩個(gè)變量,一個(gè)是具名捕獲變量 $www ,另一個(gè)是數(shù)值捕獲變量 $2
- if 里面不支持使用次序捕獲變量,否則會(huì)報(bào)錯(cuò)( unknown "1" variable),所以增加了 ?<www> 將 $1 的值賦給了 $www
減少跳轉(zhuǎn)次數(shù)
以上設(shè)置已經(jīng)滿足了實(shí)現(xiàn)結(jié)果,但是有一點(diǎn)瑕疵,就是 http://www.chanvinxiao.com 會(huì)先跳轉(zhuǎn)到 https://www.chanvinxiao.com, 再跳轉(zhuǎn)到 https://chanvinxiao.com ,進(jìn)行二次跳轉(zhuǎn)肯定是不如只需跳轉(zhuǎn)一次的,所以最好讓其直接一步到位,修改 http 的配置如下:
server { listen 80; server_name ~^(?:www\.)?(.+)$; return 301 https://$1$request_uri; }
在 http 對(duì)應(yīng)的 sever 中,把 server_name 也改為正則模式,并將 $host 用捕獲的根域名 $1 取代
www 在這里會(huì)直接棄掉,所以不需要捕獲,使用 ?: 標(biāo)示實(shí)現(xiàn)只分組不捕獲,于是后面的根域名就成了 $1
這樣的結(jié)果是不管原來是否帶 www,都統(tǒng)一跳轉(zhuǎn)到不帶 www 的 https 根域名
總結(jié)
以上配置中不需指定特定域名,可方便兼容和移植,使用了 Nginx 的以下特性:
- server_name 的正則匹配
- return 指令接收狀態(tài)碼和地址
- $host 和 $request_uri 嵌入變量
到此這篇關(guān)于使用Nginx實(shí)現(xiàn)301跳轉(zhuǎn)至https的根域名的文章就介紹到這了,更多相關(guān)Nginx 301跳轉(zhuǎn)至https根域名內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Nginx配置HTTP強(qiáng)制跳轉(zhuǎn)到HTTPS的解決辦法
- Nginx接收Http協(xié)議請(qǐng)求轉(zhuǎn)發(fā)使用Https協(xié)議的問題
- Nginx實(shí)現(xiàn)http自動(dòng)跳轉(zhuǎn)到https
- Nginx將http轉(zhuǎn)換成https的詳細(xì)過程
- Nginx域名轉(zhuǎn)發(fā)https訪問的實(shí)現(xiàn)
- 使用nginx方式實(shí)現(xiàn)http轉(zhuǎn)換為https的示例代碼
- nginx開啟HSTS讓瀏覽器強(qiáng)制跳轉(zhuǎn)HTTPS訪問詳解
- 如何通過nginx負(fù)載均衡跳轉(zhuǎn)https
- 詳解NGINX訪問https跳轉(zhuǎn)到http的解決方法
- nginx配置將HTTPS請(qǐng)求轉(zhuǎn)換成HTTP的方法實(shí)現(xiàn)
相關(guān)文章
如何使用Nginx和uwsgi在自己的服務(wù)器上部署python的flask項(xiàng)目
Nginx 是一個(gè)高性能的 HTTP 和反向代理服務(wù),其特點(diǎn)是占有內(nèi)存少,并發(fā)能力強(qiáng),事實(shí)上nginx的并發(fā)能力在同類型的網(wǎng)頁服務(wù)器中表現(xiàn)較好,這篇文章主要介紹了如何使用Nginx和uwsgi在自己的服務(wù)器上部署python的flask項(xiàng)目,需要的朋友可以參考下2023-11-11Nginx rewrite和proxy_pass的區(qū)別及說明
這篇文章主要介紹了Nginx rewrite和proxy_pass的區(qū)別及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06nginx rewrite 偽靜態(tài)配置參數(shù)詳細(xì)說明
nginx rewrite 偽靜態(tài)配置參數(shù)和使用例子 附正則使用說明2010-05-05分割nginx日志的實(shí)現(xiàn)(避免日志多大)
nginx默認(rèn)沒有提供對(duì)日志文件的分割功能,所以隨著時(shí)間的增長,access.log和error.log文件會(huì)越來越大,本文主要介紹了分割nginx日志的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-04-04Nginx upstream的5種權(quán)重分配方式分享
Nginx upstream的5種權(quán)重分配方式分享,需要的朋友可以參考下2012-09-09升級(jí)nginx支持HTTP/2服務(wù)端推送的方法
這篇文章主要介紹了升級(jí)nginx支持HTTP/2服務(wù)端推送的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-05-05nginx做代理時(shí)如何修改querystring方法詳解
這篇文章主要介紹了nginx做代理時(shí)如何修改querystring的方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08