如今手头上的项目是一个单页面应用,全部的页面和路由逻辑都是写死在一个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下。
问题修复很简单,将第一段配置改为以下,注意反斜杠转义