我的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的新手,所以我需要帮助
答案 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查看所有标志及其含义。