我想redirect用户到一个maintenance.php文件,如果它存在,但不是我们的内部地址。 现在我通过if语句得到了这个工作,但是这些在位置块中被认为是邪恶的。
这是现在的configuration:
if (-f $document_root/maintenance.php) { return 503; } error_page 503 @maintenance; location @maintenance { if ($ourips = 0) { rewrite ^(.*)$ /maintenance.php last; } if ($ourips = 1) { rewrite ^(.*)$ /app.php/$1 last; } } location / { # try to serve file directly, fallback to rewrite try_files $uri @rewriteapp; } location @rewriteapp { # rewrite all to app.php rewrite ^(.*)$ /app.php/$1 last; } location ~ ^/(app|clear|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; }
在位置@maintenance中没有两个if语句的任何替代方法?
得到它的工作,使用一些如果,但他们不应该在这方面的邪恶据我所知。
if (-f $document_root/maintenance.php) { set $test A; } if ($ourips = 0) { set $test "${test}B"; } if ($test = AB) { return 503; } error_page 503 @maintenance; location @maintenance { rewrite ^(.*)$ /maintenance.php last; } location / { # try to serve file directly, fallback to rewrite try_files $uri @rewriteapp; } location @rewriteapp { # rewrite all to app.php rewrite ^(.*)$ /app.php/$1 last; } location ~ ^/(app|clear|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; }
nginx.conf
geo $ourips { default 0; xxx.xxx.xxx.xxx 1; }