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重定向就解決了問題,經過測試完美解決這個問題。如下圖

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

感謝##

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM