[原]Nginx重定向Rewrite分析

http://homeway.me


nginx-reverse-proxy-conf


0x01.About

之前写过Nginx重定向了,http://homeway.me/2014/10/28/nginx-reverse-proxy-conf/,但当时比较模糊。

这里主要说两种常用的重定向,都是php中的重定向。

一种是typecho的带 index.php 例如 http://homeway.me/index.php/arg1/arg2,另一种是隐藏 index.phphttp://homeway.me/arg1/arg2

以下配置代码均亲测可用。



0x02.ngx_http_rewrite_module

首先还是按常理,先脑补下nginx地rewrite规则,http://nginx.org/en/docs/http/ngx_http_rewrite_module.html

关于nginx重写的指令主要由这么一些:
1. break指令 2. if指令 3. return指令 4. rewrite指令 5. rewrite_log指令 6. set指令

  • break指令
    停止执行当前虚拟主机的后续rewrite指令集

  • if指令
    对给定的条件condition进行判断。如果为真,大括号内的rewrite指令将被执行。
    有几个要记住的操作符:
    使用=,!= 比较的一个变量和字符串
    是用~,~*与正则表达式匹配的变量,如果这个正则表达式中包含},;则整个表达式需要用” 或’ 包围
    使用-f,!-f 检查一个文件是否存在
    使用-d,!-d 检查一个目录是否存在
    使用-e,!-e 检查一个文件、目录、符号链接是否存在
    使用-x,!-x 检查一个文件是否可执行

详细中文看这里好了: http://www.nginx.cn/216.html



0x03.nginx.conf

首先要明白我们现在要做的事情是两类, /index.php/arg1/arg2/arg1/arg2

1.类typecho的 /index.php/arg1/arg2

/index.php/arg1/arg2 跑的location是index.php文件,也就是说,我们要做一个location匹配.php的正则,并且要让它分辨出uri中的 /arg1/arg2

这个正则有很多种写法,我用的是lnmp传统的写法~ [^/]\.php(/|$)

完整匹配如下:

location ~ [^/]\.php(/|$)
{
    #try_files $uri =404; 住址扫描目录用的,这里我们都是虚假目录,删除。
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass  unix:/tmp/php-cgi.sock;
    fastcgi_index index.php;
    include     fastcgi.conf;
    #fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    #include    fastcgi_params;
}

我测了下,这样其实就搞定了,typecho重定向就好了,不要向网上说的3个if语句。

只要访问/index.php/arg1/arg2就能访问到内容了。

这里有几个问题:

  • fastcgi_split_path_info干嘛用的?

去查找官网文档吧, http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_split_path_info

Defines a regular expression that captures a value for the fastcgipathinfovariable.Theregularexpressionshould

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值