- 开发无止境 -
Data: 2013-06-27 10:36:54Form: JournalClick: 14
由于只是学习伪静态就自己配个host随便玩了,也没多写配置文件,注意是伪静态
上面的一条伪静态(rewrite)是将访问wojiuwangla.com/wangla.html给301(重定向)到百度。
首先配置host,我的电脑是win10的,host文件在C:\Windows\System32\drivers\etc\hosts
访问结果
访问域名,正常返回,然后访问伪静态试试看
别激动,还没敲回车
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,刚才只是热身,接下来继续
这次多添加了两条新规则
1:访问wojiuwangla.com/wangla.html跳转到百度
2:访问wojiuwangla.com/纯数字至少一个数字.html跳转到QQ官网
3:访问wojiuwangla.com/匹配字母或数字或下划线组合.html 跳转到问道官网(有没有 道十二 的道友)
重启完访问试试看
回车后结果
已经跳转了,因为我们的伪静态是\d变量匹配,所以我们输入其他数字也是会跳转
OK,让我们试试下一条伪静态
回车后结果
也跳转了,我们再试试数字字母,数字下划线,数字字母下划线组合之后的结果
OK,然后我们在试试在本地服务器上进行伪静态跳转
创建测试页面
修改配置文件,添加网站根目录,以及修改伪静态规则,因为上面两条影响的太大,无论你是什么开头,只要是html结尾的就会跳转到相应的网站。
记得清楚浏览器缓存,否则可能会出现还是返回问道官网的页面
访问结果如下
接下来把固定的伪静态改一下,这样的话,访问符合条件的php文件都会跳到相对应的html上,比如访问/index-3.php就会跳转到/index.html上。
规则没有太多变化,只不过把第一个正则参数(\w+)写到要显示的对应的路径上了,第一个参数是$1,第二个是$2
再创建个文件测试真实性
不好意思,我没配置php,我给php改个名
OK,再试试看
换成test试试
OK,都已经跳转,我们尝试多个参数
文件也改名了,好了,再试试看,千万记住,修改完配置文件必须重启/重载,要不不会生效
OK,再了解一下长度限制,
访问结果
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;
这样的话第二条不会生效
permanent参数是永久性重定向,状态码是301。
redirect参数临时重定向,状态码是302。
last参数匹配条件成功后,跳出当前location,不跳出server,(如果写在server下,没有location,直接就下一步了),重新在server里请求,相当于再一次请求server,匹配到之后,去请求最后的链接。
break参数匹配成功后,直接去请求break伪静态之后的链接。
break例子:
rewrite ^/222/(.*) /333/$1 break;
rewite ^/222/(\w+)/ /xxxxx/$1 break;
rewrite ^/333/(\d+)/$ https://aa.com/333 permanent;
#######################################################
访问aa.com/222/ccc.html ----》 aa.com/333/ccc.html
这就是break,最后访问的是aa.com/333/ccc.html,不会继续往下走,下面的规则不生效。
last例子:
rewrite ^/wangla/1.html$ /ccc/1.html last;
rewrite ^/ccc/(\d).html$ /ddd/1.html break;
#######################################################
访问aa.com/wangla/1.html ----》 url变成 aa.com/wangla/ccc/1.html ,然后继续请求一次,向下匹配规则
因为已经是 aa.com/wangla/ccc/1.html ---》 aa.com/ddd/1.html
我们访问的是aa.com/wangla/1.html,最后出现的是 aa.com/ddd/1.html
这就是last,不跳出server继续向下匹配,如果下面没有规则了,那就直接请求/ccc/1.html了。