需求##
本來我們一般情況下都是域名abc.com解析到網站的根目錄/root/public這種。但是客戶突然提出了一個奇葩的需求,客戶要求以后可能網站會增多,需要增加分區的功能,比如abc.com/wh/代表武漢的網站,abc.com/sy/代表沈陽的網站,如果打開域名會自動跳到某一個分區網站。###
過程##
1.路由轉發###
因為我用的框架是thinkphp5.0,有一個定義路由的功能,可以以路由的形式改變url然后達到轉發的效果。但是因為網站整個搬過去的時候已經完工了,這個時候修改路由會導致整個網站所有的url發生變更,工作量很大。沒有一個工程師願意接這個活,所以只能想到服務器轉發,於是開始探索服務器轉發這個路子。####
2.nginx重定向###
然后想到了用nginx重定向的功能rewrite將請求到根目錄的請求全部轉發到分區/wh/中去,然后匹配/wh/的分區location,進行解析這個網站。但是很不幸,因為定義了根目錄的原因,thinkphp5直接將/wh/解析成了一個模塊,然后就會報錯找不到wh這個模塊,資源加載也會自動j加上/wh/會導致所有資源加載不出來。其實是因為請求轉發的時候解析有問題導致thinkphp5.0將/wh/解析成模塊了
后來在百度之后吸取了教訓,修改之后如下
終於能正常轉發域名到分區域名下,並且thinkphp5.0也能正常解析,但是資源因為加了/wh/的原因不能正常加載了,如下圖
一片紅字,所有的資源被轉發只有無法正常解析
3.nginx重定向+資源重定向###
因為網頁已經能正常解析了,加班兩天的情況下不舍得放棄這個成果。於是研究這些靜態資源該怎么辦,后來也是用location轉發的功能,讓靜態資源也能正常加載。如下圖
頁面可以正常顯示了
后記##
以為要完工的時候,測試之后發現了一個問題。接口的請求也被轉發了,因為rewrite的原因導致post的參數全部丟失,無法獲取到正常的數據。后來嘗試用了反向代理,但是這樣的話地址欄url就不會發生改變,不符合客戶的需求。於是繼續問人、百度,終於發現一個大佬有過這個經歷,轉發之后參數丟失。在國外網站上找到了解決辦法,用nginx307重定向就解決了問題,經過測試完美解決這個問題。如下圖
這個時候接口也能請求了,然后完工。