常用的nginx rewrite重写规则

本文提供一些常用的rewrite重写规则,用来美化网页的链接。规则里面的$1$2你不知道是怎么来的话,只要记住,第一个()里面的是$1,第二个()里面的是$2.
请求的URL是给人看的,重写后的URL是给电脑看的。

执行搜索

这个规则的目的是为了执行搜索,搜索URL中包含的关键字。

请求的URL	//hqidi.com/search/some-search-keywords
重写后URL	//hqidi.com/search.php?p=some-search-keywords
重写规则	        rewrite ^/search/(.*)$ /search.php?p=$1?;

用户个人资料页面

大多数运行访问者注册的动态网站都提供一个可以查看个人资料的页面,这个页面的URL包含用户的UID和用户名

请求的URL	//hqidi.com/user/47/dige
重写后URL	//hqidi.com/user.php?id=47&name=dige
重写规则	        rewrite ^/user/([0-9]+)/(.+)$ /user.php?id=$1&name=$2?;

多个参数

有些网站对字符串参数使用不同的语法,例如 通过斜线“/”来分隔非命名参数

请求的URL	//hqidi.com/index.php/param1/param2/param3
重写后URL	//hqidi.com/index.php?p1=param1&p2=param2&p3=param3
重写规则	        rewrite ^/index.php/(.*)/(.*)/(.*)$ /index.php?p1=$1&p2=$2&p3=$3?;

类似百科的格式

这种格式特点,一个前缀目录,后跟文章名称

请求的URL	//hqidi.com/wiki/some-keywords
重写后URL	//hqidi.com/wiki/index.php?title=some-keywords
重写规则	        rewrite ^/wiki/(.*)$ /wiki/index.php?title=$1?;

论坛

论坛一般用到两个参数,一个话题标识(topic)一个出发点(starting post)

请求的URL	//hqidi.com/topic-1234-50-some-keywords.html
重写后URL	//hqidi.com/viewtopic.php?topic=1234&start=50
重写规则        	rewrite ^/topic-([0-9]+)-([0-9]+)-(.*)\.html$ viewtopic.php?topic=$1&start=$2?;

新网站的文章

这种URL结构的特点,由一个文章标识符,后跟一个斜线,和一个关键字列表组成。

请求的URL	//hqidi.com/88/future
重写后URL	//hqidi.com/atricle.php?id=88
重写规则	        rewrite ^/([0-9]+)/.*$ /aticle.php?id=$1?;

最后一个问号

若被替换的URI中含有参数(类似/app/test.php?id=5之类的URI),默认情况下参数会被自动附加到替换串上,可以通过在替换串的末尾加上?标记来解决这一问题。

rewrite ^/users/(.*)$ /show?user=$1? last;

比较一个加上?标记和不加?标记的URL跳转区别:

rewrite ^/test(.*)$ //hqidi.com/home premanent;

访问//hqidi.com/test?id=5 经过301跳转后的URL地址为 //hqidi.com/home?id=5

rewrite ^/test(.*)$ //hqidi.com/home? premanent;

访问//hqidi.com/test?id=5 经过301跳转后的URL地址为 //hqidi.com/home

posted @ 2019-03-07 10:43  张富  阅读(802)  评论(0编辑  收藏  举报
levels of contents