nginx配置伪静态规则 nginx伪静态语法_伪静态

由于只是学习伪静态就自己配个host随便玩了,也没多写配置文件,注意是伪静态

上面的一条伪静态(rewrite)是将访问wojiuwangla.com/wangla.html给301(重定向)到百度。

首先配置host,我的电脑是win10的,host文件在C:\Windows\System32\drivers\etc\hosts

nginx配置伪静态规则 nginx伪静态语法_伪静态_02

访问结果

nginx配置伪静态规则 nginx伪静态语法_html_03

访问域名,正常返回,然后访问伪静态试试看

nginx配置伪静态规则 nginx伪静态语法_rewrit_04

别激动,还没敲回车

nginx配置伪静态规则 nginx伪静态语法_nginx配置伪静态规则_05

Look,结果出来了,从http://wojiuwangla.com/aa.html跳转到百度了。

伪静态需要用到的正则匹配,只是copy了一部分

Copy以下的正则来源:https://www.jb51.net/article/91444.htm

平时常用的:

~      为区分大小写的匹配。~*     不区分大小写的匹配(匹配firefox的正则同时匹配FireFox)。!~     不匹配的!~*    不匹配的

.     匹配除换行符以外的任意字符\w     匹配字母或数字或下划线或汉字\s     匹配任意的空白符\d     匹配数字\b     匹配单词的开始或结束^     匹配字符串的开始$     匹配字符串的结束

*     重复零次或更多次+     重复一次或更多次?     重复零次或一次{n}     重复n次{n,}     重复n次或更多次{n,m}     重复n到m次*?     重复任意次,但尽可能少重复+?     重复1次或更多次,但尽可能少重复??     重复0次或1次,但尽可能少重复{n,m}?     重复n到m次,但尽可能少重复{n,}?     重复n次以上,但尽可能少重复

\W     匹配任意不是字母,数字,下划线,汉字的字符\S     匹配任意不是空白符的字符\D     匹配任意非数字的字符\B     匹配不是单词开头或结束的位置[^x]     匹配除了x以外的任意字符

OK,刚才只是热身,接下来继续

nginx配置伪静态规则 nginx伪静态语法_html_06

这次多添加了两条新规则

1:访问wojiuwangla.com/wangla.html跳转到百度

2:访问wojiuwangla.com/纯数字至少一个数字.html跳转到QQ官网

3:访问wojiuwangla.com/匹配字母或数字或下划线组合.html 跳转到问道官网(有没有 道十二 的道友)

重启完访问试试看

nginx配置伪静态规则 nginx伪静态语法_rewrit_07

回车后结果

nginx配置伪静态规则 nginx伪静态语法_rewrit_08

已经跳转了,因为我们的伪静态是\d变量匹配,所以我们输入其他数字也是会跳转

nginx配置伪静态规则 nginx伪静态语法_rewrit_09

nginx配置伪静态规则 nginx伪静态语法_nginx_10

OK,让我们试试下一条伪静态

nginx配置伪静态规则 nginx伪静态语法_html_11

回车后结果

nginx配置伪静态规则 nginx伪静态语法_伪静态_12

也跳转了,我们再试试数字字母,数字下划线,数字字母下划线组合之后的结果

nginx配置伪静态规则 nginx伪静态语法_html_13

nginx配置伪静态规则 nginx伪静态语法_rewrit_14

OK,然后我们在试试在本地服务器上进行伪静态跳转

创建测试页面

nginx配置伪静态规则 nginx伪静态语法_html_15

修改配置文件,添加网站根目录,以及修改伪静态规则,因为上面两条影响的太大,无论你是什么开头,只要是html结尾的就会跳转到相应的网站。

nginx配置伪静态规则 nginx伪静态语法_nginx_16

记得清楚浏览器缓存,否则可能会出现还是返回问道官网的页面

访问结果如下

nginx配置伪静态规则 nginx伪静态语法_rewrit_17

接下来把固定的伪静态改一下,这样的话,访问符合条件的php文件都会跳到相对应的html上,比如访问/index-3.php就会跳转到/index.html上。

nginx配置伪静态规则 nginx伪静态语法_nginx配置伪静态规则_18

规则没有太多变化,只不过把第一个正则参数(\w+)写到要显示的对应的路径上了,第一个参数是$1,第二个是$2

再创建个文件测试真实性

nginx配置伪静态规则 nginx伪静态语法_html_19

不好意思,我没配置php,我给php改个名

nginx配置伪静态规则 nginx伪静态语法_nginx配置伪静态规则_20

OK,再试试看

nginx配置伪静态规则 nginx伪静态语法_html_21

换成test试试

nginx配置伪静态规则 nginx伪静态语法_rewrit_22

OK,都已经跳转,我们尝试多个参数

nginx配置伪静态规则 nginx伪静态语法_html_23

nginx配置伪静态规则 nginx伪静态语法_nginx配置伪静态规则_24

文件也改名了,好了,再试试看,千万记住,修改完配置文件必须重启/重载,要不不会生效

nginx配置伪静态规则 nginx伪静态语法_伪静态_25

nginx配置伪静态规则 nginx伪静态语法_nginx配置伪静态规则_26

OK,再了解一下长度限制,

nginx配置伪静态规则 nginx伪静态语法_nginx_27

nginx配置伪静态规则 nginx伪静态语法_伪静态_28

访问结果

nginx配置伪静态规则 nginx伪静态语法_rewrit_29

 rewrite  "^/3-(\d{3,6}).php$"   /3-$1.html permanent;

前面那一段需要用双引号引住,否则会被nginx认为}配置文件已经结尾了,然后报错。

{4,}代表最少4位数。最多无穷大。

伪静态大致应该就是这样的,可以在加多个参数后面跟不同的变量,根据自己的需求调整,万变不离其宗,可以在这些的基础上面修改,多个参数就是(\w+)-(\d+)-(\w+)这种的,后面跟$1-$2-$3一般来说不会轻易让(\w+)(\d+)挨着,\w包括了数字字母下划线而且有+号,代表不止是一个,如果匹配os91f0_31na2222这个字符串的话,直接用一个(\w+)就可以的,不用再多写个(\d+),也可以精确写成(\w+)na(\d+)。

还得说一点,注意伪静态的顺序,

比如你的第一条是

^(.*)/$  https://www.baidu.com/ last;

第二条是

^/test/$ https://www.qq.com/ last;

这样的话第二条不会生效

#####################################更新一下

刚刚发现之前写的有些漏洞,后来查阅其他博主的文章又深入了解了一下,这里给大家分享一下last,break的用法。

server
{
    listen  80;
    server_name wojiuwangla.com;

    index index.html index.htm index.php;
    default_type text/html;   #这一条一定要有,否则浏览器访问会提示下载
    root  /usr/share/nginx/html;  

    location /break/ {
        rewrite ^/break/(.*) /test/$1 break;
        return 200 "break page";
    }
    location /last/ {
         rewrite ^/last/(.*) /test/$1 last;
         return 200 "last page";
    }
    location /test/ {
       return 200 "test page";
    }
    
   rewrite ^/sort/(.*) /test/$1 last;
    location /sort/ {
      return 200 "sort page";
    }

}

1. 输入 http://wojiuwangla.com/break/

返回404, rewrite后在本location没找到test匹配规则,所以404,符合  "rewrite后不会跳出location 作用域。它的生命也在这个location中终结"

nginx配置伪静态规则 nginx伪静态语法_伪静态_30

 

2. 输入 http://wojiuwangla.com/last/

返回 test page   符合:rewrite 后会跳出location 作用域,重新开始再走一次刚刚的行为

nginx配置伪静态规则 nginx伪静态语法_html_31

 

3. 输入 http://wojiuwangla.com/sort/

返回 test page  

我们把 :rewrite ^/sort/(.*) /test/$1 last; 放到最后一行输出结果也是一样的 说明:交换rewrite和location位置,执行结果不变,说明这个和位置无关

nginx配置伪静态规则 nginx伪静态语法_html_32