Weiterleitung mit Features, Erweiterung der Weiterleitung (intern/extern) |
Willkommen, Gast ( Anmelden | Registrierung ) [ Hilfe | Mitglieder | Suche ]
Weiterleitung mit Features, Erweiterung der Weiterleitung (intern/extern) |
Sat. 23. June 2007, 22:48
Beitrag
#1
|
|
Advanced Member Gruppe: AdvancedMembers Beiträge: 541 Mitglied seit: 27.06.2006 Mitglieds-Nr.: 8 |
Ich hatte ein Problem damit eine interne Weiterleitung mit Weitergabe des Query-Strings zu realisieren.
Letztlich kam ich zu diesem Feature, nämlich in der Weiterleitung (Input-Feld) verschiedene Variablen zu parsen:
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 ... 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 ... 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)? |
|
|
Sat. 23. June 2007, 23:11
Beitrag
#2
|
|
Advanced Member Gruppe: Moderators Beiträge: 911 Mitglied seit: 26.06.2006 Wohnort: Essen; Ruhrgebiet Mitglieds-Nr.: 4 |
Ui, das ist fein...
-------------------- |
|
|
Sun. 24. June 2007, 13:13
Beitrag
#3
|
|
Advanced Member Gruppe: AdvancedMembers Beiträge: 853 Mitglied seit: 16.06.2006 Wohnort: Wien / Österreich Mitglieds-Nr.: 2 |
moved - bei bedarf als FR mit link hierher posten.
-------------------- SEFRENGO | a free choice ... again!
|
|
|
Vereinfachte Darstellung | Aktuelles Datum: 25.9.24 - 16:34 |