nginx分區域名轉發 tp5域名分目錄配置

需求

本來我們一般情況下都是域名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重定向就解決了問題,經過測試完美解決這個問題。如下圖

這個時候接口也能請求了,然後完工。

感謝

感謝嚴總、凱哥、衛哥的支持,幫忙提供了意見纔想到了這個解決方案,謹以此記。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章