nginx + php-fpm。重定向到php脚本

时间:2014-02-12 09:20:42

标签: nginx

我的nginx配置部分(成功运行)

... *config* ...

location ~ \.php$ {

    if (!-e $request_filename) {
        rewrite ^(.*)$ /index.php break;
    }
    set $nocache "";

    include fastcgi_params;
    fastcgi_pass  php-fpm;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /var/www/folder/$fastcgi_script_name;
    fastcgi_param DOCUMENT_ROOT /var/www/folder/;
    fastcgi_intercept_errors on;

    fastcgi_cache_use_stale error timeout invalid_header http_500;
    fastcgi_cache_key $host$request_uri;
    #   fastcgi_cache folder;
    fastcgi_cache_valid 200 1m;
    fastcgi_cache_bypass $nocache;
    fastcgi_no_cache $nocache;

    fastcgi_buffer_size 128k;
    fastcgi_buffers 4 256k;
    fastcgi_busy_buffers_size 256k;

    proxy_connect_timeout   900;
    proxy_send_timeout  900;
    proxy_read_timeout  900;
    fastcgi_send_timeout    900;
    fastcgi_read_timeout 900;
}

现在我需要为/ my / operation =>添加重写规则/my.php?operation

location /my/ {
    rewrite ^(.*)$ /my.php?$1 break;
}

重写规则正在运行,但是php文件正在下载,而不是正在执行。

我是Nginx的新手,所以我需要帮助

1 个答案:

答案 0 :(得分:3)

您的问题是,通过放置break您告诉nginx您已完成并且您不希望任何进一步处理,因此location ~ \.php$未处理,因此文件正在下载。

通过添加last代替你告诉nginx进行重写并重新开始处理,这次它与location ~ \.php$匹配,因此正在处理文件。

所以最终的解决方案是

location /my/ {
    rewrite ^(.*)$ /my.php?$1 last;
}

虽然我通常倾向于以更简单的方式写它,因为你要匹配整个事情

location /my/ {
    rewrite ^ /my.php?$1 last;
}

您可以read the documentation查看所有标志及其含义。