前一段时间领导让我用nginx做个伪静态,实现效果如下:

原URL http://www.domain.com/abc/def.jsp?x=1&y=2&z=3

转换为http://www.domain.com/abc/def-1-2-3.html,当我访问原URL时,浏览器的地址栏里显示的是转换后的URl,但内容还是原来动态页面的内容。



    开始我是这么写的


rewrite ^/abc/def-(.*)\-(.*)\-(.*)\.html$ /abc/def.jsp?x=$1&y=$2&z=$3 last;


     实现的效果是当我在地址栏里输入http://www.domain.com/abc/def-1-2-3.html这个URL的时候,确实显示的是原URL的内容。

    但这和我想实现的效果不一样,谁会在浏览器里敲上这个URL啊,我想让它自己在浏览器里显示静态页面,而不是用户自己输入进去好吗?后来我了解到,这个是要程序那边在写地址的时候, 写这个静态的 url,不再写动态的url了,靠!整个人都不好了……

    那有没有办法实现我想要的效果呢?北京的随心给我提供了一个思路:nginx跳两次。

你点击开直接访问的就是动态 url, 只不过做成301 跳转到后面的这个 不存在的静态页上面, 而在这里 又有一条伪静态规则, 将静态页跳到真实的动态页面, 但是使用 last 标记, 这个url 不会变,这样前台看到的就是静态的 url

    思路有了,后面就简单了,在前面加一条rewrite 重定向即可。



当然了,这个方法并不实用也不建议用,最好还是在程序里面实现伪静态,nginx这么做的话坏处是显而易见的,但领导要这么个效果,先给他看看,后期还是要改的