Nginx重写触发下载

时间:2013-03-14 20:56:24

标签: nginx rewrite

我正在努力在nginx上创建一个简单的重写URL 我的配置如下所示:

location /foo/bar {
    rewrite ^/(.+)$ /index.php?p=$1 break;
}

E.g。 /foo/bar/baz应该成为/foo/bar/index.php?p=baz(当然在内部)

但是,通过/foo/bar/访问的所有内容都会触发位于根目录下的index.php的下载。我如何让它工作?

我也尝试使用try_files,但无法弄清楚如何从/foo/bar/排除$uri路径。

2 个答案:

答案 0 :(得分:10)

更改

rewrite ^/(.+)$ /index.php?p=$1 break;

rewrite ^/(.+)$ /index.php?p=$1 last;

基于http://wiki.nginx.org/HttpRewriteModule#rewrite

  

last - 完成当前重写指令的处理并重新启动该过程(包括重写),并搜索所有可用位置的URI匹配。

[编辑]使用break将保留在同一位置块内。在您的情况下,该位置块内没有其他规则。因此,默认情况下,nginx会将其作为文件请求提供。

答案 1 :(得分:0)

不会将PHP文件解释为常规文件。您需要设置一个像FPM这样的CGI服务器,并将连接传递给这些进程。

有关详细信息,请参阅http://wiki.nginx.org/Configuration

<强>更新

我不确定为什么你的例子会中断。但我猜您需要将rewrite更改为try_files

location /foo/bar {
    try_files $uri $uri/ /index.php?p=$uri;
}