Apache RewriteRule L 标志无效
0Apache rewrite 规则解析时,把 uri 转换成 target 后,还要重新验证所有规则。
如果你写了多条规则,按优先级排列,需要注意了,[L] 这个 flag 可能不是你想象的那么简单。
比如:
RewriteRule ^apple/(.*) apple.php [L]
RewriteRule ^orange/(.*) orange.php [L]
RewriteRule ^(.*)$ index.php [QSA,L]
当你的请求是 www.leakon.com/apple/about/iPhone,你猜 Apache 会执行到哪里?
很不幸地,执行到了 index.php 上,不是你想象的 apple.php 。
为啥?
因为虽然能匹配 ^apple/(.*),但在内部 Apache 把 /apple/about/iPhone 转换为 apple.php ,然后要重新从头开始验证每一条规则。
此时 apple.php 已经不匹配 ^apple/(.*) 和 ^orange/(.*),最后走到 ^(.*)$,在内部又转换为 index.php,然后再次从头开始检验。
到最后,发现 index.php 就是 index.php,好,停止解析,运行 index.php。
那咋办?
改成这样:
RewriteRule ^apple/(.*) apple.php [L]
RewriteRule ^apple.php – [L]
RewriteRule ^orange/(.*) orange.php [L]
RewriteRule ^orange.php – [L]
RewriteRule ^(.*)$ index.php [QSA,L]
啥意思?
- [L]
There is a special substitution string named ‘-’ which means: NO substitution! Sounds silly? No, it is useful to provide rewriting rules which only match some URLs but do no substitution, for example, in conjunction with the C (chain) flag to be able to have more than one pattern to be applied before a substitution occurs.
大致意思是说 “-” 意味着不要做 uri 替换。
在我的例子里,就是告诉 Apache 转换到 apple.php,就可以匹配了,不用再做后续任何解析。
16:00 – 24:00,我的时间啊。。。
preg_match_all crash Apache
0今天遇到一个诡异的问题,折腾了好久。
有一段 html,需要用正则表达式匹配一对标签内的所有文本,用到了 preg_match_all。
一直都没什么问题,但是今天修改了 html 的内容,再次运行的时候 Apache 突然 crash。
换用命令行执行,却没问题。
一步一步跟踪,发现问题出在 preg_match_all 身上。
为什么命令行执行正常,到了 Apache 就崩溃呢?
去 Google 搜了下 “apache preg_match_all”,发现果然有人遇到了这样的问题。
其中有一条是 https://bugs.php.net/bug.php?id=47689
意思是 Apache 的 stack 的 size 在各个平台下都不一样,可以用下面的指令设置 ThreadStackSize :
<IfModule mpm_winnt_module>
ThreadStackSize 8*1024*1024
</IfModule>
我试了下,没用!
不过算是有了参考思路,应该是 preg_match_all 内部递归的时候层次太深,达到了 Apache 允许的最大堆栈层次,Apache 果断退出!
这应该是 Windows 版 Apache 特有的问题,我在 Linux 下的 Apache 运行同样的程序,就可以成功得到结果。
有意思的是,这个网页上面还提供了一个范例程序,我把它搞出来供大家下载测试:
http://leakon.googlecode.com/svn/trunk/php/apache_crash/apache_crash.php
综上,得出结论是通过 Apache 没法执行这个程序了。
但问题还要解决,临时想了个土办法,测试通过了,给大家分享过程:
(1)把要解析的文本写入临时磁盘文件
(2)用 system 执行命令行程序读取这个文件,仍然用 preg_match_all 解析
(3)把解析结果序列化存入刚才这个文件
(4)在 Apache 的 php 中读取这个文件,并反序列化
(5)删掉这个临时文件
实在是没办法了。。。
Parent: child process exited with status 255 — Restarting
0最近在碰PDO(PHP Data Object),使用的時候忽然發現,在select資料的時候apache會被關掉,insert不會,只有select的時候才會,不知道是啥鬼狀況,log裡面就只出現這行
Parent: child process exited with status 255 — Restarting
膜拜了很久的google大神之後才發現這篇,上面提到這是xampp 1.70在windows上(?)的錯誤,修正方法如下
Problem solved. Turns out this is a bug in XAMPP 1.7.0 PHP and the fix is already there.
To fix the problem:
in “xampp\apache\bin”
copy libmysql_5.0.51a.dll libmysql.dll
in “xampp\php”
copy libmysql_5.0.51a.dll libmysql.dll
in “xampp\php\ext”
copy php_mysql_5.0.51a.dll php_mysql.dll
copy php_mysqli_5.0.51a.dll php_mysqli.dll
弄好之後就正常了…
如何在香港3G上網 香港3電信
0我相信很多人都很愛去香港,不過有很多上網症候群的朋友,到香港不想用貴貴的漫遊方案,
大方今天跟大家介紹一個好用又便宜的香港 3G 上網吃到飽方案,而且連 Micro Sim卡都有唷,
和信黃埔集團旗下的香港3和記電信,也可以簡稱香港3電信,就有推出像我們這種旅行客,
好用的上網方案唷,而且有好幾種費率,最便宜18塊港幣上網吃到飽,最貴28塊,真的很方便。
再來大方要介紹大家怎麼買到 3G上網吃到飽方案,首先在香港機場出關後,
先不要急著搭機場快線進市區,搭電梯到離境大樓,就可以找到 3 Shop了。
大嶼山香港國際機場一號客運大樓離境大堂(第七層)7T038號舖
星期一至六:07:00am – 11:00pm 星期日及公眾假期:07:00am – 11:00pm
http://www.hongkongairport.com/chi/shopping/insideshopping/t1/audio/3sho.html
其實大方覺得在香港機場買到3G上網卡是最方便的,因為馬上就可以上網,
不過如果你趕時間的話,在香港的市區裏, 3 Shop也是很多間可以買的到的。
香港、九龍、新界 3 Shop 地址 List:http://goo.gl/c6oAy
其實不管在那一間 3 Shop 只要跟他們說,要買 3G 至抵月費循環儲值咭 ,
或著直接講要買 3G 上網卡也可以,服務人員就會問你是什麼手機。
其實一般手機大多是標準的 Sim 卡,那麼直接可以買標準方案 98塊的,
像 iPhone 3G、3GS都是使用標準 Sim卡,這張卡片98塊,每天上網上限28塊。
所以很適合3天2夜來香港玩的朋友使用,重點這張卡還配有香港門號,
在香港跟朋友或打回台灣都很方便,而且在香港互打香港門號很便宜。
98塊的卡似乎在豐澤電器、屈臣士都買的到。
官網98塊3G上網吃到飽方案:http://goo.gl/LiLhI
重點來了,現在很多人都使用了 iPhone 4、iPad2,都是使用 MicroSim 卡,
香港3電信也準備了 MicroSim卡 3G 吃到飽方案,不過這方案比較貴,
官網寫的是 3G 循環儲值咭適用於iPad,這個方案是 198塊港幣,
不過一天上網上限是 18 塊,所以如果純上網的話,可以使用到11天,
不過一般人來香港玩可能用不到那麼多天,不過沒關係,
這兩種卡都從開卡起,半年、六個月內有效,如果你在半年內會再來香港,
那麼大方覺得 198 方案比較方便啦,不過這個 198方案只有在 3 Shop買的到。
重點是這個方案也是配有香港門號,還是可以打電話的唷。
官網 3G 循環儲值咭適用於iPad 方案:http://goo.gl/QyB0o
當然這個 198 方案的 Sim 卡,也是可以給一般標準 Sim 卡使用唷。
通常大方在現場買,都會請服務人員當場測試ok後才會離開,
不過如果你趕時間,那麼 Sim卡包裏面有如果使用的說明跟介紹,
再仔細閱讀吧。
不過大方在這邊要補充一下,因為大方幾個月前來香港辦的 198 方案,
儲值卡沒過期,也還有餘額,不過發現這次來香港後,電話正常,
但就是無法上網,於是跑了一趟 3 Shop ,服務人員改了一下 APN設定,
APN = imobile.three.com.hk 就 ok 了,如果你也同樣的狀況不能連上網,
那麼看一下你的 APN 設定吧,不然直接跑 3 Shop 也很方便啦。
不過這次在市區 3 Shop 買到 98 標準方案,換了包裝。
不過根據服務人員說,上網方案還是一天上網上限為 28塊。
不過 98 塊的 Sim 卡,就是標準 Sim 卡, iPhone 4、iPad2不能用,
除非你要試著剪卡,這個方法,大方就不敢保證能不能用了,呵呵。
不管是 98塊方案、198塊方案,如果講話太多,或打國際電話回台灣太多,
那麼還是有儲值卡可以買的,就看你要買 55、100、200的增儲券儲值卡囉。
香港3電信的3G吃到飽方案,大方覺得挺方便的,
而且真的打回台灣,用Skype又省很多,
加上還有香港的門號,朋友、家人有事找也不怕找不到人,
所以大方覺得,如果有智慧型手機的人,值得一辦啦。
補充:
98塊的方案 免月租費 ,手機可以開熱點分享,每日上限28塊。
198塊的方案,要月租費18塊,手機不能開熱點分享,每日上限18塊。
依自己的需求選擇需要的資費方案吧~
Agoda 最多推薦的 香港、尖沙咀、旺角、中環、灣仔 地區 飯店
(a) 唯港薈 (Hotel Icon) @ 2011年06開幕、時尚設計旅店、地鐵尖東站P1出口
(b) 蘭桂坊 (Lan Kwai Fong) @ 離蓮香樓、九記牛腩近、地鐵上環站步行10分鐘
(c) 香港精品酒店 (Jia Boutique) @ 有家的fu、離銅鑼灣sogo商圈近、地鐵3分鐘
(d) 晉逸精品酒店 銅鑼灣 @ 離時代廣場近、銅鑼灣地鐵10-15分鐘
(e) 帝樂文娜公館酒店 (The Luxe Manor) @ 九龍設計旅店、機場接駁巴士直達
(f) 灣仔皇悦酒店 (Empire Hotel Hong Kong Wan Chai) @ 地鐵灣仔站步行10分鐘
(g) 尖沙咀 The Mira Hotel @ 設計旅店、海港城十分鐘、地鐵尖沙咀B1出口旁
(h) 百樂酒店 (Park Hotel) @ 交通方便、地鐵尖沙咀B2出口8分鐘
(i) 晉逸精品酒店 尖沙咀 @ CP值高、地鐵尖沙咀8分鐘
(j) 半島酒店 (Peninsula Hotel) @ 五星奢華、服務佳、地點方便
香港 Hong Kong 地區相關訂房資訊:Agoda中文訂房?
http://www.agoda.com.tw/asia/hong_kong/hong_kong.html
IE 隐私报告 cookie
0今天开发一个浏览器 bookmarklet 的应用,加载一些 Javascript。
在 Firefox 上测试都很顺利,搬到 IE 上居然不能执行!
点击书签后,仔细观察浏览器的反应,看到状态栏突然出现一个图标,是“隐私报告”,打开后,提示我要访问的网站有第三方 cookie,已被阻止。
我就很奇怪了,另一个 bookmarklet 应用是同一套流程开发的,怎么没出现这样的问题?
把两边的代码改成一样的,结果还是不行!
把浏览器的设置全部重置一遍,依然不行。
我已经要抓狂了!
最后,我抱着试试看的想法,把书签的 url 路径改了一下,在测试,居然成功了!
后来分析,是因为 url 中包含一个单词 “collect”!
原来 IE 发现你的 script 的 src 是第三方域名,并且路径包含 collect,就会自动阻止访问!
IE 真是满身坑啊!
——–
2012-2-24 更新
之前的理解有误,不是单词的问题。资源不能加载成功的原因是 javascript 代码不严谨,定义数组的最后一个元素以逗号 “,” 结尾了。在 Firefox 下没问题,在 IE 下会失败。
关于隐私错误,我进一步的理解是:请求跨域的 script 资源,浏览器会把第三方域名的 cookie 附带在请求中一起发出去。IE 会对部分 cookie 做限制。
如果第三方希望通过 cookie 获取用户状态,在 IE 设置了高级别的隐私政策后,有可能失效。
Symfony 2 的一些中文文档
0这几天集中看了下 Symfony 2 的文档,也试着写了几个 Bundle,体会是:思路完全不一样了。
寻找 Bundle 相关的的文档时,发现有人已经翻译了很多,基本覆盖了80% 的内容。
给大家分享一下吧。
PUTTY WINSCP 中文版有后门程序
0请立即停止使用 PUTTY,WINSCP,SSH SECURE SHELL 的中文汉化版,这些“汉化”的软件会在你登陆服务器的时候将密码发送到某个指定的网站。
我强烈建议:凡是安全相关的软件,都不要使用国内的软件,或者汉化的。简单的英文界面涉及到的英文单词没几个,花点时间查查就都明白了。
我的判断,使用这些工具的中文版的工程师,多半是主动性很差的。他们害怕遇到陌生词汇,不想花时间查词霸。同样的,在技术上遇到难题,多半也是选择逃避,不会硬着头皮去钻研和解决。
grep 归档日志的好办法
0归档的日志文件,想要从中找出匹配的数据,我最近才知道有更好的办法。
先说说我以前的笨方法:
* 先解压 bz2 文件到纯文本
* 再 grep 这个文本
* 完成后再删除这个纯文本
整个过程很麻烦。
有位高手告诉我更简单的办法:
bzcat debug_log.bz2 | grep ‘pattern’ > result.txt
这个是一边解压一边 grep,不用创建新文件,不太占 IO。
试了下,效果还不错,可以同时处理好几个,系统负载也不高。

















