aboutsummaryrefslogtreecommitdiff
path: root/pmwiki.php
diff options
context:
space:
mode:
authorpetko <petko@524c5546-5005-0410-9a3e-e25e191bd360>2024-01-12 16:34:40 +0000
committerpetko <petko@524c5546-5005-0410-9a3e-e25e191bd360>2024-01-12 16:34:40 +0000
commit2ebab7d78d039e36828918ebcde1287a453f8b60 (patch)
tree56fe2d95f9907dd536c65efdf314eef58051fd8c /pmwiki.php
parentab403c73c928f43134455f84f67445e3559750ba (diff)
downloadpmwiki.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.php24
1 files changed, 17 insertions, 7 deletions
diff --git a/pmwiki.php b/pmwiki.php
index 88da34c7..c06d55cc 100644
--- a/pmwiki.php
+++ b/pmwiki.php
@@ -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));