2012-04-07 73 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