nginx伺服器,部分配置如下:
location /
location
~ \.php($|/)
然後yaf的所有請求路由解析之後均預設指向了index控制器index方法,即為預設方法;
當把path_info模式關閉,即注釋掉之後,則yaf的路由解析正常;
path_info是乙個cgi的標準,可以用來做為傳參載體。
paht_info模式的url是這樣的:
http://localhost/index.php/home/user/login?var=value
其中home/user/login就是path_info的值,var=value是引數;
而且當開啟nginx的path_info模式的時候,php中預定義變數$_server[『path_info』]是有值的,是被nginx賦值的,如果關閉nginx的path_info模式,$_server[『path_info』]沒有被定義(是沒有這個key,不是為空值);
通過以下例子來分析:
開啟path_info模式關閉path_info模式訪問 模式url)
結果:
$_server[「path_info」]=>string(11) 「/index/test」
$_server[「request_uri」]=>string(25) 「/index.php/index/test?a=b」
解析正常,路由解析到index/test
訪問 無index.php的url)
結果:
$_server[「path_info」]=>string(0) 「」
$_server[「request_uri」]=>string(11) 「/index/test」
解析錯誤,路由解析到index/index
訪問 模式url)結果:
$_server[「path_info」] undefined
$_server[「request_uri」]=>string(11) 「/index/test」
解析正常,路由解析到index/test
訪問 無index.php的url)
結果:
$_server[「path_info」] undefined
$_server[「request_uri」]=>string(11) 「/index/test」
解析正常,路由解析到index/test
因為我們想要的實現的訪問路徑是不帶index.php的,我們用nginx隱藏了index.php,所以我們出問題的就是上面例子中開啟path_info模式的第二個例子;正常訪問就是上面例子中關閉path_info模式的第二個例子;
從上面例子中得知,當有path_info這個值的時候,使用無index.php的url訪問,會解析錯誤;而當沒有path_info這個值得時候,使用無index.php的url訪問,解析正常;所以我們猜想,yaf的路由解析肯定優先解析path_info的值,然後才會去解析request_uri的值;
yaf的原始碼:
do
}# 解析request_uri
uri = yaf_request_query_str(yaf_global_vars_server, "request_uri", sizeof("request_uri") - 1);
if (uri)
php_url_free(url_info);
} else else
}break;}}
...} while (0);
可以看到,只要path_info存在,那麼yaf會優先解析path_info,否則解析request_uri;
不知道用rewrite模式是否可以同時開啟path_info模式,並且同時還能隱藏index.php;有待嘗試!
一次奇葩Hama問題記錄
對hama進行改進,引用了乙個類a a繼承了執行緒類 當該類實現如下時,graphjobrunner 中 override public final void setup bsppeerpeer throws ioexception,syncexception,interruptedexceptio...
一次線上oom問題記錄
某天早上發現服務無法正常訪問,於是展開問題排查。1。首先檢視日誌,發現有oom日誌存在。這時候看到oom,犯了想當然的錯誤,認為是記憶體不足,堆記憶體空間已經用完。於是檢視 發現某個模組中有如下 誰寫的,站出來,我保證不打你。當時盲目的認為就是使用這個執行緒池的問題 關於此執行緒池的弊端不再贅述 於...
一次線上FullGC問題記錄
標題採自 英雄聯盟 瑞文 斷劍重鑄之日,騎士歸來之時!前兩天早上在擠地鐵的時候看到小組群裡,主管發了好多訊息,開啟來一看,說是xx專案自從22號發版後,每天晚上就瘋狂full gc,讓我們查一下什麼原因,嘻嘻嘻,一開始聽到,心裡竊喜,為什麼呢。因為自己以前對jvm也有些了解,不過都只是紙上談兵罷了。...