Letztlich kam ich zu diesem Feature, nämlich in der Weiterleitung (Input-Feld) verschiedene
Variablen zu parsen:
- {%cat} - wird mit $con_tree[1234]['link'] ersetzt
- {%side} - wird mit $con_side[1234]['link'] ersetzt (default)
- {%http_host} - wird mit $cfg_client['htmlpath'] ersetzt
- {%request_uri} - wird mit base64_encode($_SERVER['REQUEST_URI']) ersetzt
- {%query_string} - wird mit preg_replace('/sf_rewrite=[^&]*&/i','',$_SERVER['QUERY_STRING']) ersetzt
- {%status_301} - wird mit 'Status: 301 Moved Permanently' ersetzt
- {%status_302} - wird mit 'Status: 302 Moved Temporarily' ersetzt (default)
Die Besonderheit bei {%query_string} ergibt sich dadurch das über den Redirect ansonsten das
angehängte sf_rewrite= (bei ModeRewrite=2)einen Loop produziert!
In der Backend-Datei projektxy/cms/inc/backend.php musste zusätzlich
zum sf_rewrite= verhindert werden das ein extra view= einen Loop produziert!
Beispiel Eingaben für Weiterleitung:
QUELLTEXT
11
-> Weiterleitung zur Idcatside 11 mit default Header 'Status: 302 Moved Temporarily' (alte Funktionalität)QUELLTEXT
11{%cat}
-> Weiterleitung zur Idcat 11 mit default Header 'Status: 302 Moved Temporarily'QUELLTEXT
22{%side}
-> Weiterleitung zur Idcatside 22 mit default Header 'Status: 302 Moved Temporarily'QUELLTEXT
22{%status_301}
-> Weiterleitung zur Idcatside 22 mit Header 'Status: 301 Moved Permanently'QUELLTEXT
33{%status_302}{%query_string}
-> Weiterleitung zur Idcatside 33 mit Header 'Status: 302 Moved Temporarily' und angehängtem $_SERVER['QUERY_STRING']QUELLTEXT
33{%status_301}{%cat}
-> Weiterleitung zur Idcat 33 mit Header 'Status: 301 Moved Permanently'QUELLTEXT
{%http_host}forum.php{%query_string}
-> Weiterleitung zum Forum (forum.php) mit default Header 'Status: 302 Moved Temporarily' und angehängtem $_SERVER['QUERY_STRING']QUELLTEXT
{%http_host}request.php?{%request_uri}
-> Weiterleitung zur request.php mit default Header 'Status: 302 Moved Temporarily' und angehängtem $_SERVER['REQUEST_URI']QUELLTEXT
http://www.domain.de/request.php?foo={%request_uri}{%query_string}
-> Weiterleitung zur www.domain.de/request.php mit default Header 'Status: 302 Moved Temporarily' und angehängtem $_SERVER['REQUEST_URI'] und angehängtem $_SERVER['QUERY_STRING']... ab hier Hack!?
hier meine Änderungen (frontend.php - erste und letzte Zeile Original):
CODE
// Seite weiterleiten?
if ($con_side[$idcatside]['meta_redirect'] == '1' && $con_side[$idcatside]['meta_redirect_url'] != '') {
$redirect = '';
$meta_redirect_url = $con_side[$idcatside]['meta_redirect_url'];
if (strpos($meta_redirect_url, '{%status_301}') !== false) $status = 'Status: 301 Moved Permanently';
else $status = 'Status: 302 Moved Temporarily';
$apend_query = (strpos($meta_redirect_url, '{%query_string}') !== false) ? true : false;
$con_side_or_tree = (strpos($meta_redirect_url, '{%cat}') !== false) ? 'con_tree' : 'con_side';
$meta_redirect_url = trim(str_replace(array('{%status_302}', '{%status_301}', '{%query_string}', '{%cat}', '{%side}'), array('', '', '', '', ''), $meta_redirect_url));
if (is_numeric($meta_redirect_url)) {
$con_side[$idcatside]['meta_redirect_url'] = ${$con_side_or_tree}[$meta_redirect_url]['link'];
if ($cfg_client['url_rewrite'] == '1') {
$con_side[$idcatside]['meta_redirect_url'] = preg_replace($cfg_client['url_rewrite_in'], $cfg_client['url_rewrite_out'], $con_side[$idcatside]['meta_redirect_url']);
} else if ($cfg_client['url_rewrite'] == '2') {
$con_side[$idcatside]['meta_redirect_url'] = preg_replace_callback($cfg_client['url_rewrite_in'], rewriteHandle, $con_side[$idcatside]['meta_redirect_url']);
}
$redirect = $cfg_client['htmlpath'] . $con_side[$idcatside]['meta_redirect_url'];
} else {
if (strpos($meta_redirect_url, 'http://{%http_host}') !== false && strpos($cfg_client['htmlpath'], 'http://') !== false) $meta_redirect_url = str_replace('http://', '', $meta_redirect_url);
$redirect = str_replace(array('{%http_host}', '{%request_uri}'), array($cfg_client['htmlpath'], base64_encode($_SERVER['REQUEST_URI'])), $meta_redirect_url);
}
// strip last ?/&
$redirect = ereg_replace( "(&|\?)+$", '', $redirect );
if ($apend_query) {
$redirect .= ((strpos($redirect, '?') !== false) ? '&' : '?') . preg_replace('/sf_rewrite=[^&]*&/i','',$_SERVER['QUERY_STRING']);
}
header("$status");
$redirect = str_replace('&', '&', $redirect);
header ('Location:' . $redirect );
// throw out side
} else ...
if ($con_side[$idcatside]['meta_redirect'] == '1' && $con_side[$idcatside]['meta_redirect_url'] != '') {
$redirect = '';
$meta_redirect_url = $con_side[$idcatside]['meta_redirect_url'];
if (strpos($meta_redirect_url, '{%status_301}') !== false) $status = 'Status: 301 Moved Permanently';
else $status = 'Status: 302 Moved Temporarily';
$apend_query = (strpos($meta_redirect_url, '{%query_string}') !== false) ? true : false;
$con_side_or_tree = (strpos($meta_redirect_url, '{%cat}') !== false) ? 'con_tree' : 'con_side';
$meta_redirect_url = trim(str_replace(array('{%status_302}', '{%status_301}', '{%query_string}', '{%cat}', '{%side}'), array('', '', '', '', ''), $meta_redirect_url));
if (is_numeric($meta_redirect_url)) {
$con_side[$idcatside]['meta_redirect_url'] = ${$con_side_or_tree}[$meta_redirect_url]['link'];
if ($cfg_client['url_rewrite'] == '1') {
$con_side[$idcatside]['meta_redirect_url'] = preg_replace($cfg_client['url_rewrite_in'], $cfg_client['url_rewrite_out'], $con_side[$idcatside]['meta_redirect_url']);
} else if ($cfg_client['url_rewrite'] == '2') {
$con_side[$idcatside]['meta_redirect_url'] = preg_replace_callback($cfg_client['url_rewrite_in'], rewriteHandle, $con_side[$idcatside]['meta_redirect_url']);
}
$redirect = $cfg_client['htmlpath'] . $con_side[$idcatside]['meta_redirect_url'];
} else {
if (strpos($meta_redirect_url, 'http://{%http_host}') !== false && strpos($cfg_client['htmlpath'], 'http://') !== false) $meta_redirect_url = str_replace('http://', '', $meta_redirect_url);
$redirect = str_replace(array('{%http_host}', '{%request_uri}'), array($cfg_client['htmlpath'], base64_encode($_SERVER['REQUEST_URI'])), $meta_redirect_url);
}
// strip last ?/&
$redirect = ereg_replace( "(&|\?)+$", '', $redirect );
if ($apend_query) {
$redirect .= ((strpos($redirect, '?') !== false) ? '&' : '?') . preg_replace('/sf_rewrite=[^&]*&/i','',$_SERVER['QUERY_STRING']);
}
header("$status");
$redirect = str_replace('&', '&', $redirect);
header ('Location:' . $redirect );
// throw out side
} else ...
hier meine Änderungen (backend.php - erste und letzte Zeile Original):
CODE
//redirect is active
if($con_side[$idcatside]['meta_redirect'] == '1' && $con_side[$idcatside]['meta_redirect_url'] != '') {
$redirect = '';
$meta_redirect_url = $con_side[$idcatside]['meta_redirect_url'];
if (strpos($meta_redirect_url, '{%status_301}') !== false) $status = 'Status: 301 Moved Permanently';
else $status = 'Status: 302 Moved Temporarily';
$apend_query = (strpos($meta_redirect_url, '{%query_string}') !== false) ? true : false;
$con_side_or_tree = (strpos($meta_redirect_url, '{%cat}') !== false) ? 'con_tree' : 'con_side';
$meta_redirect_url = trim(str_replace(array('{%status_302}', '{%status_301}', '{%query_string}', '{%cat}', '{%side}'), array('', '', '', '', ''), $meta_redirect_url));
if (is_numeric($meta_redirect_url)) {
$con_side[$idcatside]['meta_redirect_url'] = ${$con_side_or_tree}[$meta_redirect_url]['link'];
$redirect = $cfg_client['htmlpath'] . $con_side[$idcatside]['meta_redirect_url'];
} else {
if (strpos($meta_redirect_url, 'http://{%http_host}') !== false && strpos($cfg_client['htmlpath'], 'http://') !== false) $meta_redirect_url = str_replace('http://', '', $meta_redirect_url);
$redirect = str_replace(array('{%http_host}', '{%request_uri}'), array($cfg_client['htmlpath'], base64_encode($_SERVER['REQUEST_URI'])), $meta_redirect_url);
}
// strip last ?/&
$redirect = ereg_replace( "(&|\?)+$", '', $redirect );
if ($apend_query) {
$pattern = array("/sf_rewrite=[^&]*&/i", "/&view=[^&]*/i");
$replace = array('', '');
$redirect .= ((strpos($redirect, '?') !== false) ? '&' : '?') . preg_replace($pattern, $replace, $_SERVER['QUERY_STRING']);
}
header("$status");
$redirect = str_replace('&', '&', $redirect);
header ('Location:' . $redirect );
}
// throw out side
else ...
if($con_side[$idcatside]['meta_redirect'] == '1' && $con_side[$idcatside]['meta_redirect_url'] != '') {
$redirect = '';
$meta_redirect_url = $con_side[$idcatside]['meta_redirect_url'];
if (strpos($meta_redirect_url, '{%status_301}') !== false) $status = 'Status: 301 Moved Permanently';
else $status = 'Status: 302 Moved Temporarily';
$apend_query = (strpos($meta_redirect_url, '{%query_string}') !== false) ? true : false;
$con_side_or_tree = (strpos($meta_redirect_url, '{%cat}') !== false) ? 'con_tree' : 'con_side';
$meta_redirect_url = trim(str_replace(array('{%status_302}', '{%status_301}', '{%query_string}', '{%cat}', '{%side}'), array('', '', '', '', ''), $meta_redirect_url));
if (is_numeric($meta_redirect_url)) {
$con_side[$idcatside]['meta_redirect_url'] = ${$con_side_or_tree}[$meta_redirect_url]['link'];
$redirect = $cfg_client['htmlpath'] . $con_side[$idcatside]['meta_redirect_url'];
} else {
if (strpos($meta_redirect_url, 'http://{%http_host}') !== false && strpos($cfg_client['htmlpath'], 'http://') !== false) $meta_redirect_url = str_replace('http://', '', $meta_redirect_url);
$redirect = str_replace(array('{%http_host}', '{%request_uri}'), array($cfg_client['htmlpath'], base64_encode($_SERVER['REQUEST_URI'])), $meta_redirect_url);
}
// strip last ?/&
$redirect = ereg_replace( "(&|\?)+$", '', $redirect );
if ($apend_query) {
$pattern = array("/sf_rewrite=[^&]*&/i", "/&view=[^&]*/i");
$replace = array('', '');
$redirect .= ((strpos($redirect, '?') !== false) ? '&' : '?') . preg_replace($pattern, $replace, $_SERVER['QUERY_STRING']);
}
header("$status");
$redirect = str_replace('&', '&', $redirect);
header ('Location:' . $redirect );
}
// throw out side
else ...
Gruß
Edited:
# replace sf_header_redirect
P.S.: ist das hier richtig, oder muss das in 'Hacks' oder muss ich das Teilen (Anfrage hier -> Lösung Hacks)?