B 站面试官:“啥是重定向?”
三分鐘,帶你學習和實踐域名重定向
大家好,我是魚皮,今天分享 重定向 小知識,以及我在騰訊云云開發中實現域名重定向的實踐。
孽起
之前,我開發了一個編程導航網站,將網站放到了騰訊云云開發上,用云托管(容器)的方式部署和維護。還購買了一個域名 code-nav.cn,并且在云開發后臺 訪問服務 中,將該域名的子域名 www.code-nav.cn 和存放網站文件的容器相關聯,配置如圖:
云開發網站訪問配置然后,大家就能通過網址 www.code-nav.cn 訪問該網站了。
訪問網站但是,很快,我就發現了一個嚴重的問題。
有不少同學想要訪問我的網站,但是,由于他們輸入的網址是 code-nav.cn,省略了網址前綴 www,導致網站無法訪問。也讓我流失了一批用戶。
###初戰 —— 域名配置
要解決這個問題,其實很簡單,之前是配置 www 子域名指向容器,那在云開發后臺再加一條配置,直接將購買的域名(父域名)code-nav.cn 也指向容器,不就成了么?
配置如下:
云開發網站訪問配置這樣,無論用戶是否輸入 www 前綴,都能夠訪問到我們的網站啦!
訪問網站看似非常完美,但目前,網站其實還存在一定問題。
現存問題
首先,帶 www 與不帶 www 其實是兩個不同的網址,雖然對用戶來說,感覺是訪問了同一個網站。但對于搜索引擎,小蜘蛛們會把他們識別為兩個不同的網站,并且分別收錄這兩個路徑下網站的內容,導致權重分散。雖然對流量小的網站來說影響不大,但對于大站點,這是必須要處理的問題。
此外,訪問 code-nav.cn(不帶 www)的用戶反映,網站上的數據無法加載。這是因為,騰訊云云開發的 WEB 安全域名限制,只有在白名單內的域名才允許訪問云資源(數據、文件等),因此,還要在 安全配置 中,補上 code-nav.cn 域名。
云開發安全配置雖然現在訪問正常了,但是如果業務中還有一些和 www 網址強相關的邏輯,比如判斷用戶訪問的網址必須是 www.code-nav.cn 才允許登錄,那么你還要去修改代碼,考慮稍有不周,就會導致一些功能出現問題。
為解決這些問題,我們可以使用 重定向 技術。
重定向
重定向是一個很廣泛的概念,即通過各種方法將各種網絡請求重新定個方向轉到其它位置,比如網頁重定向、域名重定向、數據報文重定向等。
在網站開發中,重定向的應用場景太多了,比如用戶未登錄時,將它輸入的網址自動跳轉為登錄頁;用戶訪問舊版網址時,自動跳轉到新版網頁。重定向不僅是導游,也是一名霸道的保安。
因此,很多大站點都會采用重定向技術。比如訪問百度 baidu.com,按 F12 查看開發者控制臺,可以看到網址通過 302 重定向,自動跳轉為了 www.baidu.com。
重定向那問題就來了,啥是 302 重定向?
不妨看一看常見的重定向 HTTP 狀態碼。
重定向 HTTP 狀態碼
和重定向有關的 HTTP 狀態碼主要是 301、302、303、307、308,最常用的是 301 和 302,可以看看 MDN 官方對它們的解釋。
301 是永久重定向(Moved Permanently)說明請求的資源已經被 永久 移動到了由 Location 頭部指定的 url 上,是固定的不會再改變,搜索引擎會根據該響應修正。
而 302 是暫時性轉移(Moved Temporarily,或者 Found),表明請求的資源被 暫時 移動到了由 Location 頭部指定的 URL 上。瀏覽器會重定向到這個 URL, 但是搜索引擎不會對該資源的鏈接進行更新。
雖然 301 和 302 都能夠將用戶輸入的網址 A, 改為重定向后的網址 B,但他們還是有區別的:
搜索引擎區別:301 表示原地址 A 的資源已被移除,永遠無法訪問,搜索引擎抓內容時會將網址 A 全部替換為 B;而 302 表示網址 A 還活著,搜索引擎會在抓取網址 B 新內容的同時,保留網址 A 的記錄。
安全性:302 跳轉有網站劫持的風險,導致網站被盜用。
再戰 —— 云開發重定向實踐
了解重定向之后,來試試怎么實現重定向,以及如何在云開發中實現域名重定向。
實現重定向的方式有很多,很大程度上依賴于你使用的 web 服務器,比如 Nginx、Apache、Tomcat 等,一般在服務器中添加幾條配置即可。
我的編程導航網站是以容器的方式,部署在云開發提供的云托管功能上的。我把開發好的網站文件和提供 web 服務的 Nginx 服務器一起打包,做成了容器,于是,可以將每個容器當成一個小服務器,獨立運行。
要支持重定向,只需要修改下 Nginx 的配置。比如這里我選擇給整個網站添加 301 永久重定向,配置文件如下:
server {listen 80;# gzip configgzip on;...root /usr/share/nginx/html;include /etc/nginx/mime.types;# 添加重定向if ($http_host ~ "^code-nav.cn") {rewrite ^(.*) https://www.code-nav.cn permanent;} }不必手寫和記憶 Nginx 配置,直接使用可視化界面生成即可:
Nginx 可視化配置詳情參見這篇文章:輕松搞定 Nginx 配置代碼的神器!
其他的服務器配置也可以自行查閱文檔,這里不再贅述。
然后,在云托管上創建新版本,發布新的容器,就大功告成啦!
新建版本查看下效果,訪問 code-nav.cn,網站重定向到了 www.code-nav.cn,完美!
查看網絡請求總結
最后,回顧下在騰訊云云開發中實現域名重定向的完整過程,包括如下步驟:
在 訪問服務 中添加父域名到網站的指向(云托管等)
在 安全配置 中添加父域名到白名單中
在 web 服務器中添加重定向配置
新建版本,部署發布
整個流程還是非常簡單的~
如果本文對大家有幫助,請一定要給個 點贊 + 在看 支持呀!??
往期推薦
完了,最近被她們迷住了!
氣炸!又一次被編輯器坑了!
我工作中不可或缺的寶貝們!
總結
以上是生活随笔為你收集整理的B 站面试官:“啥是重定向?”的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET Core 开源项目 no
- 下一篇: WPF 使用FontAwesome字体图