nginx中的多条件rewrite解决方案

前两天在搞 nginx 的rewrite, 其中有个地址需要用到多条件判断,结果试了好久,没有办法在nginx中写出复合方式的条件判断,比如

if ($request_method !~ ^post$ && $request_filename !~ ^/file/a.* ) {
rewrite …
}

网上参照了一篇,可以通过nginx的set命令,来设置变量进行前置判断,从而达到多条件的rewrite实现。

# 先定义两变量备用
set $my_file ”;
set $my_uri $request_uri;

if ($request_method = POST) {
set $my_uri ”;
}

# 使用友好的地址方式
if ($query_string) {
set $my_uri ”;
}


# 判断$my_uri是否为空,不为空,则设置要rewrite到的文件,再在下面用rewrite转
if ($my_uri ~ ^(.+)$) {
set $my_file /cache/myfile/$http_host/$1index.html;
}

if (-f $document_root$my_file) {
rewrite ^(.*)$ $my_file break;
}

将名为$my_uri的变量作为标志位,如果不满足一些前置条件时,将标志位置空;
在最后只要判断标志位是否为空,如果不为空,再进行rewrite

Popularity: 49% [?]

Related

使用tar对一个目录下的某些文件做排除打包

使用tar打包时,有时候不希望将整个目录都打包进去,需要对某些文件或目录做排除

  1. tar cvfz backup.tar.gz site/* –exclude site/attach –exclude site/images

将site目录打包,但是排除其中attach和images目录,–exclude采用patten方式做匹配排除。

——
有尝试将 tar 已经打好包的文件用 –delete 删除一些,结果每次执行 都会提示 已放弃,检查tar包中的文件,未有被删除, 有知道什么原因的朋友可以告知一下。

Popularity: 36% [?]

Random Posts

被ftp连接的端口问题搞了好长时间

公司对移动做的彩信接口采用ftp做传输协议,程序写好后在实际连接调试时,发现怎么样都是连接服务器获取数据保存数据有问题,开始确实是服务器方有问题(通过标准的ftp客户端连接也不正常),但是在联系对方解决后,自己这端程序仍然是无法正常工作(这个时候ftp客户端连接正常)。
于是检查自己这边服务器上防火墙的配置情况,连接到对方的ftp的ip和端口是开放的,再检查自己的程序,无果。
突然想起 ftp 传输除了公开的端口外还有另外一个端口要使用(无论主动方式还是被动方式,都是),由于这个涉及到对方防火墙的设置,为了减少麻烦,直接将自己这边对对方接口服务器的ip和端口的限制改为对ip的限制,重新应用防火墙,再次运行程序,一切ok。

——–
以后涉及到ftp的应用防火墙配置的应用,一定要牢牢记住ftp服务双端口的问题,要不白浪费时间找问题啊

Popularity: 30% [?]

Random Posts

网关发送彩信Nokia手机不能显示出smil文件内容问题解决

使用自己写的ParlayX2.0接口发送发送联通的MMS彩信,几个测试的手机除了Nokia手机接收时不能显示出smil文件内容(提示要通过 对象 菜单查看彩信附件内容)其他都基本都接收显示正常,网上查找了一些资料,说是对某些手机发送数据包时要添加附件的头信息 Content-Location 值,补上发送,仍然不行,联系厂商 华为,抓了一个实际通信的数据包,对比发现我程序中发送的数据包中对附件的 Content-Type 头信息中缺少 name 的值指定,修改一下程序,在Content-Type头信息中添加上该值信息,再次发送,手机能够正常显示smil文件内容。

补一下发送的附件头信息

Content-Type:text/plain;charset=”UTF-8″;name=”0_0.txt”
Content-ID:<0_0.txt>
Content-Location:0_0.txt

Popularity: 32% [?]

Random Posts

修改trac的wiki上传附件大小

trac默认的附件大小太小了,需要增加一下大小。修改配置文件 trac.ini

[attachment]
max_size = 262144

将max_size 设置为自己期望的大小。

Popularity: 28% [?]

Random Posts

VM虚拟机网络连接丢失的简单解决方法

这一段时间一直在使用VM虚拟机做开发,常发生由于待机,插拔网线等操作造成的虚拟机网络连接失效,在虚拟机中编译的程序不能使用ftp或者scp等命令拷贝出来做实际环境的在线测试,使用service network restart命令也不能在虚拟机种恢复网络连接。

以前发生这种问题时一般都是通过关虚拟机,重启电脑,在启动虚拟机等这样比较耗时繁琐的操作来处理恢复这个虚拟机的网络连接。昨日一个不小心在虚拟机没有全屏幕化的窗口右下角发现一个网卡的图标,右击有个”disconect”的命令,执行后又有”connect”的命令,这么一来一去,丢失的网络连接就又回来了,相当于win下的网卡复位操作,十分方便,以后虚拟机载断掉网络连接时,就可以这么简单复位一下,再也不用关虚拟机,关电脑那样繁琐的操作了。

Popularity: 24% [?]

Random Posts