如今手頭上的項目是一個單頁面應用,全部的頁面和路由邏輯都是寫死在一個js文件裏的,因此路過想實現一個特定url調到對應的渲染頁面的話,須要用js實現一個路由,而且在nginx上實現路徑跳轉到對應的js。這裏的js路由使用react的route實現的。css
這裏的 rewrite的配置和tryfiles的寫法同樣,你也能夠用下面的配置實現前端
可是某個頁面仍是沒有跳轉成功。nginx的accsslog出現了以下的記錄.很明顯,第二個路徑被nginx幹掉了react
10.207.87.51?23355?-?[20/Jun/2016:16:36:07?+0800]?"GET?http://xxx.com/specs/indicator/tab/atom"?200?998?"-"?"Mozilla/5.0?(Windows?NT?6.1;?WOW64)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/48.0.2564.109?Safari/537.36"?"-"?"-"?"0acf573314664117679067908e"
?
10.207.87.51?1947?-?[20/Jun/2016:16:34:33?+0800]?"GET?http://xxx.com/help-doc/helpdoc/chanpin"?302?258?"-"?"Mozilla/5.0?(Windows?NT?6.1;?WOW64)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/48.0.2564.109?Safari/537.36"?"-"?"-"?"0acf573314664116733311513e"nginx
http://xxx.com/specs/indicator/tab/atom 它的reponse是index頁面tomcat
http://xxx.com/help-doc/helpdoc/chanpin 路徑B 沒有redirect到index頁面.reopnse也是調進了tomcat的對應頁面atom
爲了驗證是否是NGINX的問題,這裏再隨機訪問一個不存在的頁面,經過nginxlocation的配置也應該返回index的內容。實際上正好返回的是nginx的內容url
爲何其餘路徑都是ok的,是否是nginx把helpdoc或者help-doc這樣的字作了關鍵字?改造全部的前端路由及鏈接,將helpdoc都改爲assistssl
我在indexvm頁面增長一段腳本,若是url能夠經過nginx寫回到根目錄,就會彈出一個提示框pdo
從新加載以前404的頁面,發現能夠正確打出這個alert框,而且路徑渲染成功路由
爲何改一個路徑就生效了?
第一段配置是什麼?
請注意 .do 點在正則裏是任意字符的意思,那我出錯的地址是什麼helpdoc啊。helpdoc裏有什麼,do吖。。。
因此緣由就是helpdoc被.do 匹配了而後這沒有走第二段的重定向,直接落到了tomcat下。
問題修復很簡單,將第一段配置改爲以下,注意反斜槓轉義