diff options
author | Chris Buechler <cmb@pfsense.org> | 2016-01-04 22:28:55 -0600 |
---|---|---|
committer | Renato Botelho <renato@netgate.com> | 2016-01-05 09:08:10 -0200 |
commit | 1d0c3a109692a918f36aa52693c9264e98d0269c (patch) | |
tree | a9bab5722de8349b6d3a6f9b6c308e3716b4d44a /src/etc/inc | |
parent | 481909217ea419943dd7dd15bbde12e9d9895b7f (diff) | |
download | pfsense-1d0c3a109692a918f36aa52693c9264e98d0269c.zip pfsense-1d0c3a109692a918f36aa52693c9264e98d0269c.tar.gz |
Add nginx redirection for captive portal
Diffstat (limited to 'src/etc/inc')
-rw-r--r-- | src/etc/inc/system.inc | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/src/etc/inc/system.inc b/src/etc/inc/system.inc index e71a3eb..992e647 100644 --- a/src/etc/inc/system.inc +++ b/src/etc/inc/system.inc @@ -1170,8 +1170,25 @@ function system_generate_nginx_config($filename, } if ($captive_portal !== false) { - $captive_portal_rewrite = "url.rewrite-once = ( \"(.*captiveportal.*)\" => \"$1\", \"(.*)\" => \"/index.php?zone={$captive_portal}&redirurl=$1\" )\n"; - + $cp_interfaces = explode(",", $config['captiveportal'][$captive_portal]['interface']); + $cp_hostcheck = ""; + foreach ($cp_interfaces as $cpint) { + $cpint_ip = get_interface_ip($cpint); + if (is_ipaddr($cpint_ip)) { + $cp_hostcheck .= "\t\tif (\$http_host = $cpint_ip) {\n"; + $cp_hostcheck .= "\t\t\tset \$cp_redirect no;\n"; + $cp_hostcheck .= "\t\t}\n"; + } + } + if (isset($config['captiveportal'][$captive_portal]['httpsname'])) { + $cp_hostcheck .= "\t\tif (\$http_host = {$config['captiveportal'][$captive_portal]['httpsname']}) {\n"; + $cp_hostcheck .= "\t\t\tset \$cp_redirect no;\n"; + $cp_hostcheck .= "\t\t}\n"; + } + $cp_rewrite = "\t\tif (\$cp_redirect = '') {\n"; + $cp_rewrite .= "\t\t\trewrite ^ /index.php?zone=$captive_portal&redirurl=\$scheme://\$http_host\$request_uri break;\n"; + $cp_rewrite .= "\t\t}\n"; + $maxprocperip = $config['captiveportal'][$captive_portal]['maxprocperip']; if (empty($maxprocperip)) { $maxprocperip = 10; @@ -1264,6 +1281,15 @@ EOD; $nginx_config .= "\n"; } + if ($captive_portal !== false) { + $nginx_config .= <<<EOD +$cp_hostcheck +$cp_rewrite + +EOD; + + } + $nginx_config .= <<<EOD root "{$document_root}"; location / { |