fix for MDL-6680 redirect function is broken when running php as CGI, me() now used instead of SCRIPT_NAME + minor coding style changes

This commit is contained in:
skodak 2006-09-24 19:10:13 +00:00
parent 1cc309df9d
commit aade3a4b6a

View file

@ -4673,28 +4673,26 @@ function redirect($url, $message='', $delay=-1) {
// the absolute path. (In practice browsers accept relative
// paths - but still, might as well do it properly.)
// This code turns relative into absolute.
if(!preg_match('/^[a-z]+:/',$url)) {
if (!preg_match('|^[a-z]+:|', $url)) {
// Get host name http://www.wherever.com
$hostpart=preg_replace('/^(.*?[^:\/])\/.*$/','$1',$CFG->wwwroot);
if(preg_match('/^\//',$url)) {
// URLs beginning with / are relative to web server root so
// we just add them in
$url=$hostpart.$url;
$hostpart = preg_replace('|^(.*?[^:/])/.*$|', '$1', $CFG->wwwroot);
if (preg_match('|^/|', $url)) {
// URLs beginning with / are relative to web server root so we just add them in
$url = $hostpart.$url;
} else {
// URLs not beginning with / are relative to path of current
// script, so add that on.
$url=$hostpart.rtrim(dirname($_SERVER['SCRIPT_NAME']),'/\\').'/'.$url;
// URLs not beginning with / are relative to path of current script, so add that on.
$url = $hostpart.me().'/../'.$url;
}
// Replace all ..s
while(true) {
$newurl=preg_replace('/\/[^\/]*\/\.\.\//','/',$url);
if($newurl==$url) {
while (true) {
$newurl = preg_replace('|/[^/]*/\.\./|', '/', $url);
if ($newurl == $url) {
break;
}
$url=$newurl;
$url = $newurl;
}
}
$delay = 0;
//try header redirection first
@header('HTTP/1.x 303 See Other'); //302 might not work for POST requests, 303 is ignored by obsolete clients