Nginx的伪静态配置中使用rewrite来实现自动补全的实例

 更新时间:2015年12月30日 11:08:22   作者:jevien  
这篇文章主要介绍了Nginx的伪静态配置中使用rewrite来实现自动补全的实例,文中对rewrite的相关参数和正则表达使用也做了介绍,需要的朋友可以参考下

nginx+php 使用的时候经常需要伪静态,一般大家都手动设置。那有没有办法让 nginx 自动补全路径呢?
这两天折腾很久,才实现了这样一个功能:
请求 /a/b/c
若文件不存在,查找 /a/b/index.php,/c 作为 PATH_INFO;
若文件不存在,查找 /a/index.php,/b/c 作为 PATH_INFO;
若文件不存在,查找 /index.php,/a/b/c 作为 PATH_INFO;
若文件不存在,返回 404.

虽然这种损耗性能的行为不适合部署,但在本机调试的时候还是能够带来方便的 :)

server 端应有如下代码,其他部分使用自己的配置:

index index.php index.html index.htm;

location / {
  set $path $request_uri;
  set $path_info "";

  try_files $uri $uri/ @404;
}

location @404 {
  if ($path ~ ^(.*)(/.+)$) {
    set $path $1/index.php;
    set $path_info $2;
    rewrite .* $path last;
  }
  return 404;
}

location ~ .+.php($|/) {
  fastcgi_split_path_info ^(.+.php)(/.+)$;
  if ($path_info !~ .*) {
    set $path_info $fastcgi_path_info;
  }
  try_files $fastcgi_script_name @404php;

  fastcgi_param PATH_INFO $path_info;

  fastcgi_index index.php;
  include fastcgi.conf;

  fastcgi_pass unix:/usr/local/var/run/php-fpm.sock;
  fastcgi_connect_timeout 60;
  fastcgi_send_timeout 300;
  fastcgi_read_timeout 300;
}

location @404php {
  if ($path = /index.php) {
    return 404;
  }

  if ($path ~ ^(.*)(/.+)/index.php$) {
    set $path_info $2;
    set $path $1/index.php;
    rewrite .* $path last;
  }
  return 404;
}

Rewrite的Flags
last - 基本上都用这个Flag。
break - 中止Rewirte,不在继续匹配
redirect - 返回临时重定向的HTTP状态302
permanent - 返回永久重定向的HTTP状态301
规则:
一般在非根的location中配置rewrite,都是用的break;而根的location使用last比较好,因为如果配置了fastcgi或代理访问jsp文件的话,在根location下用break是访问不到

正则表达式形式的模式匹配,如~*和~

  • ‘~'表示大小写敏感的匹配
  • ‘~*'表示大小写不敏感的匹配(例如:“firefox”字符串可以成功匹配“FireFox”)
  •  !~和!~*代表跟后面的正则匹配规则相反的规则,表示不能匹配当前正则表达式规则的字符串执行后面的处理语句
  • 使用-f参数以及!-f参数检测一个文件是否存在
  • 使用-d参数以及!-d参数检测一个目录(路径)是否存在
  • 使用-e以及!-e检测是否存在一个文件,一个目录或者一个符号链接。
  • 使用-x以及!-x检测一个文件是否可执行
  • 正则表达式部分可以嵌套,表达式后面的部分如果用到前面的表达式可以用 $1 到$9 变量表示。

相关文章

  • windows下快速安装nginx并配置开机自启动的方法

    windows下快速安装nginx并配置开机自启动的方法

    这篇文章主要介绍了windows下快速安装nginx 并配置开机自启动的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-05-05
  • 一文详解Nginx的访问限制与访问控制

    一文详解Nginx的访问限制与访问控制

    访问限制是一种防止恶意访问的常用手段,可以指定同一IP地址在固定时间内的访问次数,访问控制是控制客户端对服务端的访问,并非仅限制请求次数,而是允许某些请求或者直接拒绝某些请求,本文给大家具体介绍了Nginx的访问限制与访问控制,需要的朋友可以参考下
    2024-09-09
  • Nginx配置跨域请求Access-Control-Allow-Origin * 详解

    Nginx配置跨域请求Access-Control-Allow-Origin * 详解

    这篇文章主要给大家介绍了关于Nginx配置跨域请求Access-Control-Allow-Origin * 的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Nginx具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • Nginx启用proxy_cache缓存的方法

    Nginx启用proxy_cache缓存的方法

    本篇文章主要介绍了Nginx启用proxy_cache缓存的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • 解决nginx启动失败(bind() to 0.0.0.0:80 failed,An attempt was made to access a socket in...)

    解决nginx启动失败(bind() to 0.0.0.0:80 failed,An attempt was 

    这篇文章主要介绍了解决nginx启动失败问题(bind() to 0.0.0.0:80 failed,An attempt was made to access a socket in ...),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • windows下nginx服务关不掉问题解决

    windows下nginx服务关不掉问题解决

    这篇文章主要给大家介绍了关于windows下nginx服务关不掉问题解决的相关资料,nginx是一种网络服务器,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-08-08
  • Nginx防盗链的配置方法

    Nginx防盗链的配置方法

    这篇文章主要介绍Nginx下的防盗链的配置方法,需要的朋友可以参考下
    2013-04-04
  • 在Nginx服务器上配置Google反向代理的基本方法

    在Nginx服务器上配置Google反向代理的基本方法

    这篇文章主要介绍了在Nginx服务器上配置Google反向代理的基本方法,文中使用到了SSL来加密反向代理,需要的朋友可以参考下
    2015-12-12
  • Nginx修改默认80端口(解决跟Tomcat的端口冲突)

    Nginx修改默认80端口(解决跟Tomcat的端口冲突)

    本文主要介绍了Nginx修改默认80端口(解决跟Tomcat的端口冲突),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • LNMP原理与简单部署过程

    LNMP原理与简单部署过程

    LNMP架构,是指在Linux平台下,由运行Nginx的web服务器,运行PHP的动态页面解析程序和运行MySQL的数据库组成的网站架构,也是当前常用的系统架构之一,本文主要介绍LNMP原理与简单部署,感兴趣的朋友一起看看吧
    2023-08-08

最新评论