Willkommen, Gast ( Anmelden | Registrierung )     [ Hilfe | Mitglieder | Suche ]

 
Reply to this topicStart new topic
> Weiterleitung mit Features, Erweiterung der Weiterleitung (intern/extern)
STam
Beitrag 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:
  1. {%cat} - wird mit $con_tree[1234]['link'] ersetzt
  2. {%side} - wird mit $con_side[1234]['link'] ersetzt (default)
  3. {%http_host} - wird mit $cfg_client['htmlpath'] ersetzt
  4. {%request_uri} - wird mit base64_encode($_SERVER['REQUEST_URI']) ersetzt
  5. {%query_string} - wird mit preg_replace('/sf_rewrite=[^&]*&/i','',$_SERVER['QUERY_STRING']) ersetzt
  6. {%status_301} - wird mit 'Status: 301 Moved Permanently' ersetzt
  7. {%status_302} - wird mit 'Status: 302 Moved Temporarily' ersetzt (default)
Das {%status_301} hatte ich nötig um alte URL's (aus dem Google-Cache) adäquat zu behandeln.
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)?
Go to the top of the page
 
+Quote Post
saschapi
Beitrag 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... smile.gif


--------------------
Go to the top of the page
 
+Quote Post
alexander
Beitrag 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!
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 Besucher lesen dieses Thema (Gäste: 1 | Anonyme Besucher: 0)
0 Mitglieder:

 



RSS Vereinfachte Darstellung Aktuelles Datum: 20.4.24 - 08:54

Sefrengo ist ein eingetragenes Markenzeichen und urheberrechtlich geschützt.
Copyright 2009 Design & Daten, Alle Rechte vorbehalten.