常用的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

原创文章,转载请注明: 转载自笛声

本文链接地址: 常用的nginx rewrite重写规则

1 条评论

  • dige 2019年10月13日 回复 作者

    可以打开rewrite_log日志进行调试:
    rewrite_log官方介绍如下:

    语法:rewrite_log on|off;
    默认值:rewrite_log off;
    作用域:http,server,location,if
    开启或关闭日志输出,并以notice级别打印rewrite处理日志到error log文件。

    使用方法:
    在需要测试的配置文件的server字段中,添加如下代码:

    rewrite_log on;
    error_log logs/xxxerror.log notice;
    1、将rewrite_log设置开启
    2、将error_log报警级别设置为notice,因为rewrite匹配信息为notice级别。

发表评论

电子邮件地址不会被公开。 必填项已用*标注