diff options
author | Andrey Andreev <narf@bofh.bg> | 2012-06-27 00:07:56 +0200 |
---|---|---|
committer | Andrey Andreev <narf@bofh.bg> | 2012-06-27 00:07:56 +0200 |
commit | 2fce2a95e99c91c57f7d15b5e441b2cf89193da3 (patch) | |
tree | 0b5a25e0a757ab23dca5bae7884eaeec1c149ecf | |
parent | e01db4bfe805f9c9293609089381aaa0cb7afab4 (diff) |
URL Helper redirect() to utilize HTTP/1.1 response code 303 See Other
-rw-r--r-- | system/helpers/url_helper.php | 14 | ||||
-rw-r--r-- | user_guide_src/source/changelog.rst | 1 |
2 files changed, 12 insertions, 3 deletions
diff --git a/system/helpers/url_helper.php b/system/helpers/url_helper.php index 40ce807df..39e6343a6 100644 --- a/system/helpers/url_helper.php +++ b/system/helpers/url_helper.php @@ -526,7 +526,7 @@ if ( ! function_exists('redirect')) * @param int * @return string */ - function redirect($uri = '', $method = 'auto', $http_response_code = 302) + function redirect($uri = '', $method = 'auto', $code = NULL) { if ( ! preg_match('#^https?://#i', $uri)) { @@ -538,14 +538,22 @@ if ( ! function_exists('redirect')) { $method = 'refresh'; } + elseif ($method !== 'refresh' && (empty($code) OR ! is_numeric($code))) + { + // Reference: http://en.wikipedia.org/wiki/Post/Redirect/Get + $code = (isset($_SERVER['REQUEST_METHOD'], $_SERVER['SERVER_PROTOCOL']) + && $_SERVER['REQUEST_METHOD'] === 'POST' + && $_SERVER['SERVER_PROTOCOL'] === 'HTTP/1.1') + ? 303 : 302; + } - switch($method) + switch ($method) { case 'refresh': header('Refresh:0;url='.$uri); break; default: - header('Location: '.$uri, TRUE, $http_response_code); + header('Location: '.$uri, TRUE, $code); break; } exit; diff --git a/user_guide_src/source/changelog.rst b/user_guide_src/source/changelog.rst index 27381b49a..17fb6472a 100644 --- a/user_guide_src/source/changelog.rst +++ b/user_guide_src/source/changelog.rst @@ -57,6 +57,7 @@ Release Date: Not Released - ``url_title()`` will now trim extra dashes from beginning and end. - ``anchor_popup()`` will now fill the "href" attribute with the URL and its JS code will return false instead. - Added JS window name support to ``anchor_popup()`` function. + - Added support (auto-detection) for HTTP/1.1 response code 303 in ``redirect()``. - Added XHTML Basic 1.1 doctype to :doc:`HTML Helper <helpers/html_helper>`. - Changed ``humanize()`` to include a second param for the separator. - Refactored ``plural()`` and ``singular()`` to avoid double pluralization and support more words. |