在Nginx中判断请求参数做跳转

今天有个朋友问我nginx下怎么把请求/abc_123.html的参数非tj=1的请求重定向到/abc_123.html,起初我以为rewrite就可以搞定,后来发现不是那么回事。最后的解决办法是:

if ($args !~ ^($|tj=1$)){
  set $args "";
  rewrite ^/abc_([0-9]+).html /abc_$1.html permanent;
}

rewrite模块只对URI进行处理,并不包含请求参数。

参考:

设置自己的iPhone

基本上是标准化作业。

  1. Use Umbrella backup SHSH.
  2. Jailbreak, battery percentage enable, without baseband upgrade. install cydia.
  3. Add gfwinterceptor, hakulo.us, ultrasn0w,weiphone repo source.
  • http://cydia.ifuckgfw.com
  • http://repo666.ultrasn0w.com
  • http://cydia.hackulo.us
  • http://cydia.myrepospace.com/wiim
  • http://apt.mirrordev.com
  • http://apt.weiphone.com/cydia/
  • Install ultrasn0w, appsync, OpenSSH, GoogleMap Fixer via Cydia.
  • Change root’s password.(alpine)
  • Google Map Fix还要设置一下,滤掉Map程序,因为maps没有偏移。

    update: weiphone的源不用了,维护的太差了。

    Set nameserver in dhclient.conf

    在FreeBSD上使用OpenVPN的时候不能自动更改DNS,手动更新resolv.conf之后呢,等到DHCP renew地址的时候就再次被改回去了。

    解决之道是在/etc/dhclient.conf里写下如下即可保持自行设置的DNS在第一个位置上。

    prepend domain-name-servers 8.8.8.8;
    

    还有更多关于dhclient.conf的,请参看man手册。

    BTW: 自行设定DNS之后就要把内部域名的解析换成/etc/hosts。当然也可以在本地搭一个BIND,把内部域名给forward到内部DNS去(此王道也!)。

    Use CUPS on FreeBSD

    最近把工作机从Mac换到了FreeBSD之后,有许多在Mac OS X和Windows这些成熟桌面操作系统不需要关心的问题,都需要手工去解决,在一些人看来这就是折腾,其实在我看来这也确实是折腾。不过那又怎样,我们就是不折腾不舒服司机( cc @delphij @quakelee)。

    先安装printer/cups,然后在/etc/devfs.rules里写上如下:

    [system=10]
    add path 'unlpt*' mode 0660 group cups
    add path 'ulpt*' mode 0660 group cups
    add path 'lpt*' mode 0660 group cups
    

    自然的还要在/etc/rc.conf或者/etc/rc.conf.local里写上cupsd_enable="YES"

    在这些做完了之后呢还要在/etc/make.conf里写上如下

    WITH_CUPS=YES
    CUPS_OVERWRITE_BASE=YES
    WITHOUT_LPR=YES
    

    这样一来呢,Ports里有支持CUPS的软件在安装的时候就可以自动挂上CUPS的支持了。然后要做的事情就是buildworld了。这样就会把lpr替成cups的lpr。

    说到这里我就顺嘴带几句别的。公司使用的是Fuji Xerxo DocuCentre-II 3005打印机,前几天我在Mac上设置的时候没有发现相关的驱动支持,我就去Fuji Xerxo的网站上下载了一个Mac OS X 10.5 / 10.6 Driver,杯具就是从这里开始的。那天下午我试这个驱动试了多次,浪费A4纸4张,全是乱码。后来问了个使Mac的同事,告诉用Generic PCL Laser Printer驱动就可以了,操勒,不但能正常打印,还可以双面。Fuji Xerxo的家伙们,即然你们做出了这么牛B,这么标准的产品,那还提供那个废柴驱动干啥,WTF。

    Link: CUPS on FreeBSD

    bash里关于string相关的处理

    • 取字符串的长度:${#VAR}
    # a="HelloWorld"
    # echo ${#a}
    10
    
  • 字符串截断:${VAR:POSITION}${VAR:POSITION:LENGTH}
  • # a="HelloWorld"
    # echo ${a:5}
    World
    # echo ${a:4:3}
    oWo
    
  • 字符串匹配取最短:${VAR#SUBSTRING}${VAR%SUBSTRING}
  • # a="HelloWorld"
    # echo ${a#*o}
    World
    # echo ${a%o*}
    HelloW
    

    注:#是从前向后,并且*号是紧随着的,而%则是从后向前匹配。*号是放在最后的。

  • 字符串匹配取最长:${VAR#SUBSTRING}${VAR%SUBSTRING}
  • # a="HelloWorld"
    # echo ${a#*o}
    rld
    # echo ${a%o*}
    Hell
    
  • 字符串替换:${VAR//PATTERN/REPLACEMENT}
  • # a="HelloWorld"
    # echo ${a//World/Earth}
    HelloEarth
    
  • 确定匹配位置:expr STRING : REGEX
  • # a="HelloWorld"
    # expr $a : ".*o"
    7
    

    注:这里的REGEX从名字上就说明了是一个正则表达式。

    Update:详细请参考

    在Mac下同步通信录到Google、Windows Phone

    因为我的手机坏了,就从朋友手里借了个Dopod S1来用,但是和Mac同步数据就成了一个问题了。刚开始用SyncMate来同步,也还可以,但是最近总也是连不上,无法同步。找了找看到Google对Windows Mobile的同步支持也不错,就可以使Mac同步到Google,Google再同步到Windows Mobile,这样还省得带数据线了。

    Mac OS X 10.6.2的Address Book可以直接和Google Contants同步,而10.5.x必须要有一个iPhone/iPod和iTunes同步才可以和Google同步(好奇怪的策略),没有iPhone/iPod的话就要Hack一下了,具体方法看这一篇。10.5和10.6的同步的范围有一些差别,10.5是同步Gmail里的All contacts,而10.6里则是只同步My Contacts部分。不过这个和Google的同步好象不太靠谱,所以就有了这一篇,其中有一个回复说明Google Sync Client是作为一个App client存在的,必须搭上MobileMe或者其他同步Address Book的服务才可以进行同步。下面两行就是把Google Sync Client换成了server类型,也就直接可以使用iSync的Sync Now来同步了。

    sudo defaults write /System/Library/PrivateFrameworks/GoogleContactSync.framework/Resources/ClientDescription Type 'server'
    sudo chmod 644 /System/Library/PrivateFrameworks/GoogleContactSync.framework/Resources/ClientDescription.plist
    

    也可以用命令行来手动的触发同步。通过Console.app可以看到sync产生的log,来确认同步是不是在正常进行。

    默认的同步间隔是1个小时,可以通过修改~/Library/LaunchAgents/com.google.GoogleContactSyncAgent.plist文件来改变同步间隔。

       <key>StartInterval</key>
    <integer>900</integer>
    

    如此一来Mac和Google的同步就搞定了。而Windows Mobile和Google的同步就简单多了,看这一篇就可以了。

    Update: 在Google Contacts里写新增用户的时候要写成”名 姓”的格式,名在前,姓在后,中间有空格。这样同步到Address Book里的时候姓和名的位置才是正确的。

    Automator Proxy Toggle Shell

    人都是被逼出来的,为翻墙方便,用Automator写了一个Service,就执行一段shell,还设置了一个快捷键。

    #!/bin/sh
    STAT=`sudo networksetup -getwebproxy Ethernet | head -1 | cut -d: -f 2|sed 's/ //g'`
    if [ "$STAT" == "No" ];then
    networksetup -setwebproxystate Ethernet on;
    /Users/guixing/bin/growlnotify -m "Proxy On";
    else
    networksetup -setwebproxystate Ethernet off;
    /Users/guixing/bin/growlnotify -m "Proxy Off";
    fi
    

    growlnotify是Growl的一个命令行工具。