2013-11-05 40 views
2

我將我的codeigniter文件從apache遷移到nginx,並查看nginx的重寫。我碰到下面的重寫來去除笨的index.php這個codeigniter nginx重寫的問號是什麼意思?

if (!-e $request_filename) 
{ 
    rewrite ^/(.*)$ /index.php?/$1 last; 
    break; 
} 

工作重寫。但是,我不明白/index.php?/部分。

UPDATE:

我試圖重寫問號,像rewrite ^/(.*)$ /index.php/$1 last;。它適用於普通的控制器,但是當第三方將值發佈到控制器時會中斷,例如/controller?code=something等fb oauth。

我的問題

1)什麼是問號在這種重寫的角色?這是否使index.php可選?

2)另外,codeigniter不會路由URL的問號,就像在get請求中一樣。例如,像這樣

http://example.com/controller?code=somecodehere 

休息和不調用控制器,而是試圖GET請求來調用字面上controller?code=somecodehere。這種路由處理,但我只是不明白如何。

有關此重寫的任何見解都將有所幫助。

謝謝。

回答

1

這不是正則表達式的一部分,但只是在重寫URL問號

所以

abc

變爲:

的index.php /ABC

,你應該知道 - 在PHP get參數在URL

問號標誌後通過現在笨在index.php可以從$_SERVER['QUERY_STRING']閱讀並會得到/abc。從它可以加載適當的控制器

+0

所以,它是像每個請求像'控制器'它調用'index.php?/控制器',即使沒有get參數在url中? – palerdot

+0

是的,它只是將'/ something?something'重寫爲'/index.php?/ anything%3Fsomething'並在'index.php'中處理。沒有魔術之後 – Adassko

+0

以及如何獲得控制器的請求處理這個重寫?如何處理'/ controller?code = something'? – palerdot