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

问题描述:

我的nginx的配置部分(成功合作)nginx + php-fpm。重定向到PHP脚本

... *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.php?operation

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

重写规则正在工作,但PHP文件正在下载,不执行。

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

+0

尝试将'break'改为'last' –

+0

@MohammadAbuShady是的,它有帮助。非常感谢你!如果你想 - 你可以放置你的答案,我检查它 – indapublic

你的问题是,通过将break你告诉nginx的你正在做,你不希望任何furtur处理的情况发生,所以location ~ \.php$ ISN没有进行,因此文件正在下载。

通过放入last而不是告诉nginx重写并重新启动处理,这次它匹配location ~ \.php$,因此文件正在处理中。

所以最终的解决办法是

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

虽然我通常倾向于把它写在一个简单的方法,因为你要配合整个事情

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

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