Nginx伪静态

本篇介绍在Nginx服务下使用伪静态,重写Url规则。另一篇文章Apache服务下的伪静态设置为例讲解说明。
真实Url为 http://www.abc.com/index.php?m=content&c=news&a=list&id=10,将其设置为伪静态URL http://www.abc.com/news/list/10.html。

先看下对应文章中Apache环境下的.htaccess文件重写的url规则:

Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^news/list/([0-9]+)/$ index.php?m=content&c=index&a=lists&catid=$1&page=1
RewriteRule ^news/list/([0-9]+)/([0-9]+)\.html$ index.php?m=content&c=index&a=lists&catid=$1&page=$2

Nginx实现相同Url伪静态功能的rewrite规则为:

location / {
    root   D:/web/www;
    index  index.html index.php index.htm;

    #站点的rewrite,设置伪静态

    if (!-f $request_filename){
        rewrite ^/news/list/([0-9]+)/([0-9]+).html /index.php?m=content&c=index&a=lists&catid=$1&page=$2 last;
        rewrite ^/news/list/([0-9]+)/ /index.php?m=content&c=index&a=lists&catid=$1&page=1 last;
    }
}

上例中要注意的是,第二个rewrite规则一定要放在后面,原因:

当访问 /news/list/2/ 时,只有一个参数$1,对应index.php?m=content&c=index&catid=2&page=1;
当访问 /news/list/3/4.html 时,有两个参数$1和$2,真实url本应为index.php?m=content&c=index&catid=3&page=4;但形式上也符合只有一个参数的 index.php?m=content&c=index&catid=2&page=1。

Nginx按照顺序优先原则,会优先和这个真实url做映射,因而会然把所有访问都映射到 page=1 的情况。
为了精确映射,要先匹配有两个参数的情况,再匹配只有一个参数的情况。故把参数多的rewrite规则放前面。

 

在Nginx环境下重写url规则,有几个不同点要注意:

  • 重写的url都要以“/”开头,相应后面的真实url也要以“/”开头;
  • Apache中重写的url以“$”作为结尾,Nginx中一般不需要结尾符、碰到空格就是重写url的结束;
  • 每个rewrite语句要以 “last;”结尾,重写的url、真实url、last之间用一个空格隔开;
  • url伪静态的正则表达式通用。

转载于:https://my.oschina.net/codercpf/blog/3043192

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值