diff options
author | petko <petko@524c5546-5005-0410-9a3e-e25e191bd360> | 2024-01-12 16:34:40 +0000 |
---|---|---|
committer | petko <petko@524c5546-5005-0410-9a3e-e25e191bd360> | 2024-01-12 16:34:40 +0000 |
commit | 2ebab7d78d039e36828918ebcde1287a453f8b60 (patch) | |
tree | 56fe2d95f9907dd536c65efdf314eef58051fd8c /pmwiki.php | |
parent | ab403c73c928f43134455f84f67445e3559750ba (diff) | |
download | pmwiki.svn-2ebab7d78d039e36828918ebcde1287a453f8b60.tar.bz2 |
Add $EnableRedirectQuiet = 2. Prevent infinite redirect loops.
git-svn-id: svn://pmwiki.org/pmwiki/trunk@4580 524c5546-5005-0410-9a3e-e25e191bd360
Diffstat (limited to 'pmwiki.php')
-rw-r--r-- | pmwiki.php | 24 |
1 files changed, 17 insertions, 7 deletions
@@ -1,7 +1,7 @@ <?php /* PmWiki - Copyright 2001-2023 Patrick R. Michaud + Copyright 2001-2024 Patrick R. Michaud pmichaud@pobox.com https://www.pmichaud.com/ @@ -1995,6 +1995,7 @@ function RedirectMarkup($pagename, $opt) { if (!$to) return $k; if (preg_match('/^([^#]+)(#[A-Za-z][-\\w]*)$/', $to, $match)) { $to = $match[1]; $anchor = @$match[2]; } + else $anchor = ''; $to = MakePageName($pagename, $to); if (!PageExists($to)) return $k; if ($to == $pagename) return ''; @@ -2003,10 +2004,11 @@ function RedirectMarkup($pagename, $opt) { return ''; if (preg_match('/^30[1237]$/', strval(@$opt['status']))) header("HTTP/1.1 {$opt['status']}"); - Redirect($to, "{\$PageUrl}" - . (IsEnabled($EnableRedirectQuiet, 0) && IsEnabled($opt['quiet'], 0) - ? '' : "?from=$pagename") - . @$anchor); + $equiet = IsEnabled($EnableRedirectQuiet, 0); + $oquiet = isset($opt['quiet']) ? intval($opt['quiet']) : -1; + $from = ($equiet == 2 && $oquiet != 0 || $equiet && $oquiet>0) ? '' : "?from=$pagename"; + pmsetcookie('redirectedFrom', $pagename, 0, '/'); + Redirect($to, "{\$PageUrl}$from$anchor"); exit(); } @@ -2418,12 +2420,20 @@ function HandleBrowse($pagename, $auth = 'read') { $opt = array(); SDV($PageRedirectFmt,"<p><i>($[redirected from] <a rel='nofollow' href='{\$PageUrl}?action=edit'>{\$FullName}</a>)</i></p>\n"); - if (@!$_GET['from']) { $opt['redirect'] = 1; $PageRedirectFmt = ''; } + if (@!$_GET['from']) { + $opt['redirect'] = 1; + $PageRedirectFmt = ''; + } else { - $frompage = MakePageName($pagename, $_GET['from']); + $from = @$_COOKIE['redirectedFrom']? $_COOKIE['redirectedFrom'] : $_GET['from']; + $frompage = MakePageName($pagename, $from); $PageRedirectFmt = (!$frompage) ? '' : FmtPageName($PageRedirectFmt, $frompage); } + if(@$_COOKIE['redirectedFrom']) { + pmsetcookie('redirectedFrom', '', time()-43200, '/'); + $opt['redirect'] = 0; + } if (@$EnableHTMLCache && !$NoHTMLCache && $PageCacheFile && @filemtime($PageCacheFile) > $LastModTime) { list($ctext) = unserialize(file_get_contents($PageCacheFile)); |