小心对待rewrite中邪恶的百分号(%)
今天遇到一个非常诡异的问题。
我目前是采用 /key1/value1/key2/value2 方式传递参数,非常干净明了。但是今天我试图传递一个urlencode过的字符串时发现,只要URI里带有百分号%,就会导致Apache服务器400错误,警告说“错误的请求”。
/key1/value1/key2/value_with_%_symbol 400 error
/key1/value1/key2/value_without_symbol 200 OK
查阅手册后,发现%是rewrite语法中的特殊字符,会认为是一个变量的开始,就像PHP中的美元符号$。
经测试,很多知名站点也没有解决这个问题,如WP,discuz,osnews等等。
目前找到一个解决方案,但情况有点不太一样,所以也没有测试成功。链接地址:http://stackoverflow.com/questions/734654/modrewrite-doesnt-work-for-a-url-beginning-in-percent-sign
临时解决方案:/key1/value2/?key2=evil_value2 即换回传统的方式来解决问题。
特留此文,以后找到方案时更新。