Proxy::VERSION )); } else { echo render_template("./templates/main.php", array('version' => Proxy::VERSION)); } } exit; } // decode q parameter to get the real URL $url = url_decrypt($_GET['q']); $proxy = new Proxy(); // load plugins foreach (Config::get('plugins', array()) as $plugin) { $plugin_class = $plugin . 'Plugin'; if (file_exists('./plugins/' . $plugin_class . '.php')) { // use user plugin from /plugins/ require_once('./plugins/' . $plugin_class . '.php'); } else if (class_exists('\\Proxy\\Plugin\\' . $plugin_class)) { // does the native plugin from php-proxy package with such name exist? $plugin_class = '\\Proxy\\Plugin\\' . $plugin_class; } // otherwise plugin_class better be loaded already through composer.json and match namespace exactly \\Vendor\\Plugin\\SuperPlugin $proxy->getEventDispatcher()->addSubscriber(new $plugin_class()); } try { // request sent to index.php $request = Request::createFromGlobals(); // remove all GET parameters such as ?q= $request->get->clear(); // forward it to some other URL $response = $proxy->forward($request, $url); // if that was a streaming response, then everything was already sent and script will be killed before it even reaches this line $response->send(); } catch (Exception $ex) { // if the site is on server2.proxy.com then you may wish to redirect it back to proxy.com if (Config::get("error_redirect")) { $url = render_string(Config::get("error_redirect"), array( 'error_msg' => rawurlencode($ex->getMessage()) )); // Cannot modify header information - headers already sent header("HTTP/1.1 302 Found"); header("Location: {$url}"); } else { echo render_template("./templates/main.php", array( 'url' => $url, 'error_msg' => $ex->getMessage(), 'version' => Proxy::VERSION )); } } ?>