Hello!
2014-07-07 2:51 GMT-07:00 王博:
> PHP本身有一些rewrite设置:
>
> location / {
> try_files $uri $uri/ /index.php$is_args$args;
> }
>
在 try_files 之前保存 $uri 的值到自己的某个变量中,例如 $my_uri.
> location ~ \.php$ {
> try_files $uri =404;
>
> include fastcgi.conf;
然后把 $my_uri 作为 REQUEST_URI 传递给 fastcgi,把 fastcgi.conf 中的下面这一行
fastcgi_param REQUEST_URI $request_uri;
改为
fastcgi_param REQUEST_URI $my_uri?$args;
> 测试发现,当使用capture发出子请求后,REQUEST_URI是父请求的url,也就是/lua,而不是我capture中设定的/controller/action,所以php端会出问题。
>
这是因为 $request_uri 变量的值永远是主请求的来自客户端的 URL.
> 我能想到的方法是capture的时候,传递一个?uri=/controller/action,然后php本身通过uri来解析出controller和action,但是感觉不太优雅,问问是否有更好的方法。谢谢
>
不用这么麻烦。
>在本例,$uri也没用,因为它等于/index.php
这是因为你使用的 try_files 指令又发起了一个内部跳转,于是把当前请求的 URI 又给改写掉了。所以在上面我给的建议中,把 $uri
在 try_files 执行之前的值保存到自己的 nginx 变量 $my_uri 中,应当就可以了。
Regards,
-agentzh