如果我请求/maintenance.php,它就会被执行。
如果我请求/ foo(和maintenance.php存在),则会下载maintenance.php。
我错过了什么?
location / {
try_files $uri /maintenance.php @rewriteapp;
}
location @rewriteapp {
rewrite ^(.*)$ /app_prod.php/$1 last;
}
location ~ ^/(app_prod|maintenance)\.php(/|$) {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS off;
}
注意:好像是
location ~ ^/(app_prod|maintenance)\.php(/|$)
后不会触发
try_files $uri /maintenance.php @rewriteapp;
答案 0 :(得分:3)
作为explained here,try_files
本身不会为除最后一个参数之外的任何内容发出内部重定向。
因此,如果maintenance.php存在,
try_files $uri /maintenance.php @rewriteapp;
只会将文件作为纯文本提供或下载,具体取决于您的default_type
配置设置。
注意:根据文档,在这种情况下使用perfectly fine。
if (-f $document_root/maintenance.php) {
return 503;
}
error_page 503 @maintenance;
location @maintenance {
rewrite ^(.*)$ /maintenance.php;
}
实际上,我想在维护页面中显示徽标,因此我最后添加了一些额外的行以允许资产投放。
if (-f $document_root/maintenance.php) {
return 503;
}
error_page 503 @maintenance_or_assets;
location @maintenance_or_assets {
try_files $uri @maintenance;
}
location @maintenance {
rewrite ^(.*)$ /maintenance.php;
}
答案 1 :(得分:0)
编辑/etc/php5/fpm/pool.d/www.conf并查找以“listen =”开头的行。
确保将其设置为“/var/run/php5-fpm.sock”而不是127.0.0.1:9000。
如果设置为IP地址,请更改它并重新启动PHP。