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

这篇文章主要介绍了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 变量表示。
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

一:确定你的系统是UTF编码 [root@Tserver ~]# env|grep LANG LANG=en_US.UTF-8 二:NGINX配置文件里默认编码设置为utf-8 server { listen 80; server_name .inginx.com ; index index.html index.htm index.php; root /usr/local/nginx/html/inginx.com; ch
很多网站需要采用伪静态来访问动态网页。所以像phpcms这样的系统,都提供了一个.htaccess文件,供写伪静态规则。但这个规则是针对Apache的。在nginx服务器上并不起作用。 nginx 可以直接将伪静态规则写在配置文件中,但这个需要有服务器管理权限,普通站长不
在网站建设中需要网页重定向的情况很多:如网页目录结构变动,网页重命名、网页的扩展名改变、网站域名改变等。如果不做重定向,用户的收藏和搜索引 擎数据库中的旧地址只能让访客得到一个404错误信息页面,访问流量白白丧失。不仅如此,之前该页面的一切积
利用nginx泛域名解析配置二级域名和多域名 网站的目录结构为 html ├── bbs └── www html为nginx的安装目录下默认的存放源代码的路径。 bbs为论坛程序源代码路径 www为主页程序源代码路径 把相应程序放入上面的路径通过 http://www.youdomain.com 访问
window10 64系统在安装IIS URL重写模块2伪静态组件提示需要IIS7.0以上版本。 解决方法: 打开注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp 双击右边MajorVersion,默认的数值是a,修改成9,然后再安装 ,安装完成后,再把数值修改为a即可。
一:安装nginx nginx在windows下进行完整配置,需要下载windows的nginx,下载完成后,将下载的nginx解压到你要安装配置的路径,假设我这里是D:\nginx-1.11.4\nginx-1.11.4\,打开nginx的文件夹,找到里面的conf目录的nginx.conf,修改以下内容: 打开错误日