宝玛科技网
您的当前位置:首页Nginx伪静态

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

因篇幅问题不能全部显示,请点此查看更多更全内容