首先我使用的是Nginx的URL rewrite的方法。
開啟enable_query_strings
開啟方法很簡單:在application/config/config.php設定:
$config['enable_query_strings'] = FALSE;
在專案中使用的Nginx設定中重寫URL,那麼就要在CI的設定檔中開啟字串查詢,對比URL形式的變化:
把前台和後台的URL依照一定規則重寫之後,測試都OK。但在分頁的時候出點問題,因為在開啟字串查詢之後產生的分頁URL位址有變化:
之所以會出現下面錯誤的URL是我在生成分頁的時候,base_url格式沒有變化,那麼從/user/list變成對應的/index.php?c=user&m=list之後就會變成下面情況:
而我設定的pagesize一直都是10,這樣的話per_page應該一直是10的。去看Pagination這個類別的程式碼,發現per_page只是query_string_segment的預設值,我誤以為是per_page這個參數了。
分頁相容rewrite
總結一下分頁這塊如果要相容rewrite的寫法,那麼就在生成分頁的時候改變一下base_url參數:
分頁的SQL就是:
為了保持URL一致性還是使用第二種方法,後面也可以隨便加個沒用的參數讓結果變成/user /list?x=xxx&per_page=10。
討論
關於分頁。當然也可以不使用CI自備的分頁,或是把Pagination.php改一改。
如果是作為method的一個參數傳遞的時候,正常URL如:/user/arg1/arg2/arg3,那麼在rewrite的時候就沒法傳遞過去了(至少我還沒找到解決的方法),要想解決除非把參數變成GET方式傳遞,這就要改變程式了,所以不建議。
而且使用rewrite就要針對不同形式的URL,如果專案很複雜的話就成了累贅,所以就尋求另外一種方法:讓Nginx把PATH_INFO傳遞給fastcgi,請看下一篇文章吧。
以上就是Nginx配置CodeIgniter專案(一)的內容,更多相關內容請關注PHP中文網(www.php.cn)!