Nginx rewrite 多重判断

默认Nginx不支持多重判断,可通过设置变量的方式,变相的实现多重判断。

需求:

http://192.168.1.221/[email protected]_1movsv 跳转到http://192.168.1.221/data/html/192/index.html, 其中[email protected]_1movsv 中的@是固定格式;

同时要满足ThinkPHP的伪静态配置,将http://192.168.1.221/XXX 跳转到http://192.168.1.221/index.php/XXX,这两次跳转前的请求路径都是不存在的。

解决方法:

在虚拟主机的配置文件中添加:

set $flag 0;    #设置一个变量,赋值为0
if (!-e $request_filename){
        set $flag "${flag}1";    #如果请求的文件名不存在,赋值为${flag}1
}
if ($request_filename ~* ^.*@.*$){
        set $flag "${flag}2";    #如果请求名匹配^.*@.*$,赋值为${flag}2
}
#当第一次判断成立的时候,$flag的值为01,当第二次判断也成立的时候,$flag的值为012
if ($flag = "01"){
        rewrite ^/(.*)$ /index.php/$1 last;
        break;
}
if ($flag = "012"){
        rewrite ^/(.*)@.*$ /data/html/$1/index.html permanent;
}

参考地址:http://www.111cn.net/sys/nginx/46311.htm

时间: 2024-07-29 23:12:37

Nginx rewrite 多重判断的相关文章

Nginx 多重判断

说明:nginx 不支持&& 和嵌套if判断 #多重判断,匹配移动端和http_host为xxx.com跳转到m.xxx.com set $flag 0; if ( $http_user_agent ~ "(iPhone)|(Android)" ) { set $flag "${flag}1"; } if ( $http_host ~* "^(xxx\.com)$" ) { set $flag "${flag}1&quo

Nginx实现多重IF判断的办法

在YII框架中如果访问的图片不存在,会记录大量的错误,于是我想了个办法,凡是访问不存在的图片,直接返回404,不经过YII框架 location / {  set $if_img N;  if ($request_filename ~ (.*)\.(png|gif|jpg)){    set $if_img Y;  }  if (!-e $request_filename) {    set $if_img "${if_img}Y";  }  if ($if_img = YY) { r

NGINX实现IF语句里的AND,OR多重判断

原理 就是用SET变量进行. AND 就用变量叠加,OR就用0或1切换. nginx的配置中不支持if条件的逻辑与/逻辑或运算 ,并且不支持if的嵌套语法,我们可以用变量的方式来实现: 首先是伪代码(即不被nginx支持),写在这里只是为了方便理解: if ($remote_addr ~ "^(12.34|56.78)" && $http_user_agent ~* "spider") { return 403; } 这是等效的,并真实可用的配置 s

Nginx Rewrite相关功能

Nginx Rewrite相关功能 Nginx服务器利用ngx_http_rewrite_module模块处理rewrite请求,此功能依靠RCRE(perl compatible regularexpression),因此编译之前要安装PCRE库,rewrite是nginx服务器的重要功能之一,用于实现URL的重写,URL的重写是非常有用的功能,比如它可以在我们改变网站结构之后,不需要客户端修改原来的书签,也无需 其他网站修改我们的链接,就可以设置为访问,另外还可以在一定程度上提高网站的安全性

Nginx if 条件判断

Nginx if 条件判断: 1.公司网站上线有这样的需求: 由于公司网站域名从http到https的转移,在测试阶段需要公司内部进行测试,公司内部局域网访问时强制访问加密的https服务,外部用户访问正常的http服务. 第一种方法: if ( $http_x_forwarded_for ~ ^106\.38\.53\.130|210\.12\.103\.18) { return 301 https://www.xxx.cn$request_uri; } #有的说nginx不支持这种if写法,

nginx rewrite php的CI(CodeIgniter)框架

一. 了解nginx rewrite: 正则表达式匹配,其中: * ~ 为区分大小写匹配    * ~* 为不区分大小写匹配    * !~和!~*分别为区分大小写不匹配及不区分大小写不匹配 文件及目录匹配,其中: * -f和!-f用来判断是否存在文件    * -d和!-d用来判断是否存在目录    * -e和!-e用来判断是否存在文件或目录    * -x和!-x用来判断文件是否可执行 flag标记有: * last 相当于Apache里的[L]标记,表示完成rewrite    * bre

nginx rewrite重写与防盗链配置

nginx rewrite重写规则与防盗链配置方法 时间:2016-02-04 15:16:58来源:网络 导读:nginx rewrite重写规则与防盗链配置方法,rewrite规则格式中flag标记的几种形式,盗链时返回403错误,允许的域名直接跟在第二行的域名后面. nginx rewrite重写规则与防盗链配置方法 nginx rewite 规则,官方文档:http://wiki.nginx.org/NginxHttpRewriteModule nginx rewrite规则格式:rew

Nginx Rewrite规则记录

Rewrite 是一种服务器的重写脉冲技术,它可以使得服务器可以支持 URL 重写,是一种最新流行的服务器技术.它还可以实现限制特定IP访问网站的功能.很多情况下,某个 IP 的访问很容易造成 CPU 100% (比如 某些搜索引擎的固定抓取,别人大量的采集站点),这个时候我们就要利用一些有效的手段封掉对方的 IP,让他无法消耗服务器的资源,封 IP 的方法有很多种,如果你的 Web(Nginx|Apache|other) 服务器安装了 Rewrite 模块的话,也可以试试利用 Rewrite

Nginx Rewrite的应用-根据访问平台做简单跳转

Nginx Rewrite的应用-根据访问平台做简单跳转 Rewrite模块简介 Rewrite最主要的作用就是对URL进行重写,即重定向.举个简单的例子,我们用电脑打开淘宝显示出的页面与手机打开显示出的页面,或者是IE与Chrome浏览器打开的页面,有着特别大的差别,这就是使用了Rewrite模块,为用户提供最合适的页面. Rewrite的配置 一. 在配置之前请先安装好Nginx.不会安装的同学请看我之前写过的Nginx的编译安装.二. 下面我们来编辑Nginx的主配置文件: [[email