yaf路由解析錯誤一次問題記錄

2021-08-19 18:25:30 字數 1997 閱讀 5620

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模式

訪問 模式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

關閉path_info模式

訪問 模式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也有些了解,不過都只是紙上談兵罷了。...