2012-04-07 60 views
2

我很想知道是否有可能以某種方式配置nginx,以便它將解析url參數,而不必在發送參數之前在文件名末尾指定.phpNginx與乾淨的網址,獲取參數和PHP-FPM

例如,假設我有一個帳戶模塊,根據發送的參數處理要加載帳戶的哪個方面。如果參數是?sk='login',它將加載登錄模塊。如果它是?sk='register',它將加載註冊模塊 - 依此類推。

問題是,當我輸入http://host/account?sk='login'時,當我嘗試打印數組中的值時,我沒有通過$_GET得到任何東西。事情是乾淨的URL 確實加載應該管理$_GET參數的文件,除非它實際上不會進程$_GET除非我在文件名的末尾指定.php

我猜這裏有一個nginx或php-fpm配置,它允許這個。

這可能嗎?

+0

'account'實際上是'account.php',還是有'index.php'的前端控制器,它處理URL路由? – mrlee 2012-04-07 18:00:58

+0

它實際上是'account.base.php',但nginx通過位置塊處理URL重新路由。 – zeboidlund 2012-04-07 18:10:21

+1

@hakre謹慎傳播愛情,並展示它是如何完成的? – zeboidlund 2012-04-07 18:22:56

回答

1

我想通了:

的想法,nginx的,是定義一個位置,指定位置的根目錄,然後做一個try_files而與指定$uri變量和.php文件來執行,參數。

例如:

location /somelocation { 
    root /path/to/somelocation/on/server; 
    try_files $uri /somelocation/somefile.php?key=$args; 
} 

而不是打字http://host/somelocation?key='someargument',你會指定/somelocation?someargument

從那裏,當你在你的PHP調用$_GET[ 'key' ],它會隨着key一鍵輸出someargument。關鍵可以是你指定的任何東西。

+0

請務必在執行此答案前閱讀此內容https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/#root-inside-location-block – Henno 2016-07-01 20:21:31