Advanced Mod Rewriting Contenido 4.4.4

martin2002
Beiträge: 41
Registriert: Fr 31. Okt 2003, 02:16
Wohnort: Potsdam
Kontaktdaten:

Beitrag von martin2002 » Mi 16. Feb 2005, 15:47

timo hat geschrieben:Ich vermute, daß die Funktion preg_replace einfach einen falschen RegExp-Suchstring bekommt...
genau...
das element, welches das problem verursacht ist -> "/\\/" <- in $arr_original.
und zwar aus folgendem grund:
der \ wird ja in php verwendet um ein steuerzeichen einzuleiten, deshalb schreibt man auch \\ wenn man den \ selbst haben will... deshalb kommt anscheinen in der preg_replace funktion nur noch folgendes an: "/\/"
da aber der \ in den pregs die funktion hat besondere zeichen ihrer funktion zu entbinden, wird der letzte / nicht mehr als abschluss des ausdrucks interpretiert, sondern als der ausdruck selbst und der abschluss fehlt dann ("No ending delimiter '/' found")...

um dem entgegen zu wirken fällt mir nur ein den gesamten ausdruck so zu notieren: "/\\\\/" -> php wandelt jetzt jeweils ein paar \\ in \ um und übergibt dann "/\\/" an die funktion.
Planung ist die Ersetzung des Zufalls durch den Irrtum ;-)

llaron
Beiträge: 133
Registriert: Mi 14. Jul 2004, 12:54
Kontaktdaten:

Beitrag von llaron » Fr 18. Feb 2005, 10:08

hallo,

ich habe die modifizierte contenido version 4.4.4 von stese einmal runtergeladen und installiert. nur gibt es irgendwelche probleme mit den pfaden, wenn ich in der navigation der standardinstallation klicke, wie z.b.: http://graph-o-lution.info/home/graph-o ... nfo/www///

ich nehme an, dass ich in der htaccess den "RewriteBase" pfad oder in der config den "/* Path to the htaccessfile with trailling slash */" falsch angepasst habe!?

kurz zum Pfad in der config (/* Path to the htaccessfile with trailling slash */). hier sollte wohl der server-pfad rein, wie in meinem fall:

Code: Alles auswählen

/home/graph-o-lution_info/www/
sehe ich das richtig?

nun zum pfad der htaccess, hier sollte ja auch der serverpad zum cms verzeichnis rein, also:

Code: Alles auswählen

RewriteBase /home/graph-o-lution_info/www/cms


ist mir hier iegrndwo ein fahler unterlaufen? oder woran kann es noch liegen, dass die urls nicht richtig geschrieben werden?

dank im voraus + gruß,
Nico (der von php soviel ahnung hat, wie ein ...)

stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese » Fr 18. Feb 2005, 12:03

hi,

der browser interpretiert ja die .htaccess also muss der pfad zur .htaccess auch aus sicht des browsers von der root der domain eingefügt werden. also keine server root pfade!

in der config file muss die variable so gesetzt werden:

Code: Alles auswählen

$cfg['mod_rewrite']['rootdir'] = '/';
wenn die .htaccess im root verzeichnis auf w w w.deinedomain.de liegt

wenn ein unterverzeichnis existiert um z.b. nur im CMS verzeichnis von contenido zu wirken, dann muss das so lauten:

Code: Alles auswählen

$cfg['mod_rewrite']['rootdir'] = '/cms/';
wenn die .htaccess im root verzeichnis auf w w w.deinedomain.de/cms/ liegt

in der .htaccess muss man die RewriteBase ebenfalls aus sicht des browsers anpassen. liegt die .htaccess im gleichen verzeichnis wie die front_content.php (also im verzeichnis cms) kann man diese RewriteBase zeile weg lassen. liegt das contenido in der root webservers, dann muss die RewriteBase auf /cms gesetzt werden, liegt das contenido in einem unterverzeichnis des webservers muss die rewritebase natürlich auch dieses unterverzeichnis enthalten also z.b. /projekt1/cms
etc ...

WICHTIG: dieses modifizierte cms ist derzeit in der Testphase! und sollte nur auf eigene gefahr eingesetzt werden und wenn man weiss was man macht und welche befehle wie anzuwenden sind, daher richtet sich dieses bundle auch an erfahrene entwickler!

bei dir sehe ich z.b. auch anhand deiner url mit den abschliessenden /// dass du versuchst das cms auf eine bestehende datenbank aufzusetzen. das wird zu fehlern führen, weil es derzeit keine funktion gibt, die die erweiterten datenfelder mit daten eines bestehenden CMS befüllt. das bundle ist dafür gedacht, wenn man eine neue website ohne beispiele anlegt. also theoretisch muss man in deinem falle erst jeden artikel und jede kategrie anschauen und speichern, damit die speicherroutine für die websicheren namen greift!

llaron
Beiträge: 133
Registriert: Mi 14. Jul 2004, 12:54
Kontaktdaten:

Beitrag von llaron » Fr 18. Feb 2005, 12:20

hi stese,

vielen dank für deine hilfe - jetzt funktioniert es! :-)

ich nutze das ganze auch selbst erst mal zu test-zwecken. aber die lösung gefällt mir sehr gut. schließlich kommt man heutzutage ohne websichere url's nicht mehr sehr weit. wenn man sich ein wenig mit suchmaschinenoptimierung befasst, wie ich das nebenher tue, dann ist das eine sehr gute lösung!

gruß,
Nico

Salech
Beiträge: 89
Registriert: So 5. Dez 2004, 11:00
Kontaktdaten:

Beitrag von Salech » Do 17. Mär 2005, 10:31

Hallo,

funktioniert das Modul auch mit dem DHTML Menü? Bei mir nämlich nicht.
Oder was muss ich da noch ändern?

stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese » Do 17. Mär 2005, 10:38

nein funktioniert nicht.

der sucht derzeit explizit nach

Code: Alles auswählen

href="front_content.php(.*)"
und ersetzt dieses durch die korrekte url.

für fortgeschrittene webentwickler, für die dieses modul gedacht ist, sollte es allerdings kein problem darstellen, das script dahingehend abzuändern, dass es die urls auch innerhalb von '' berücksichtigt.

Salech
Beiträge: 89
Registriert: So 5. Dez 2004, 11:00
Kontaktdaten:

Beitrag von Salech » Do 17. Mär 2005, 10:41

Das ging ja schnell! Danke.
Ok, dann werde ich wohl was basteln müssen.

Salech
Beiträge: 89
Registriert: So 5. Dez 2004, 11:00
Kontaktdaten:

Beitrag von Salech » Fr 18. Mär 2005, 17:29

Bin nun mal kein PHP-Gott möchte aber diese sehr coole mod_rewrite Erweiterung benutzen...

Die Umwandlung erfolgt hier in der front_content.php

Code: Alles auswählen

// ok let it beginn, start mod rewrite class
$str_all = preg_replace("/href=[\"|\']front_content\.php(.?|.+?)[\"|\']/ie", "'href=\"'.ModRewrite::build_new_url('\\1').'\"'", $str_all);

oder?

Hier ist ein Teil meiner DHTML-Navigation:

Code: Alles auswählen

var menue = new TMainMenu('menue','horizontal');
var Menue_1 = new TPopMenu('LEISTUNGEN','5','a','front_content.php?idcat=3&lang=1','LEISTUNGEN');
menue.Add(Menue_1);
Bin für kleine Tipps dankbar

Salech

stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese » Sa 19. Mär 2005, 06:52

schreib den aufruf mal bitte so:

Code: Alles auswählen

// ok let it beginn, start mod rewrite class
$str_all = preg_replace("/([\"|\'])front_content\.php(.?|.+?)([\"|\'])/ie", "stripslashes('\\1'.ModRewrite::build_new_url('\\2').'\\3')", $str_all);
nen versuch isses wert

Salech
Beiträge: 89
Registriert: So 5. Dez 2004, 11:00
Kontaktdaten:

Beitrag von Salech » Sa 19. Mär 2005, 11:00

Du bist GUT!!

Danke - klappt perfekt!

Vince
Beiträge: 122
Registriert: So 6. Mär 2005, 12:53
Kontaktdaten:

Beitrag von Vince » Di 22. Mär 2005, 08:47

Hallo,

klappt dieses mod-rewrite auch in der Ver. 4.4.5-r1 ?

Falls ja, würde ich das manuell nachinstallieren. Da ich erst einige Seiten stehen habe, sollte das dann machbar sein, denke ich.

greetz, Vince

stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese » Di 22. Mär 2005, 09:19

kann ich dir nicht sagen, weil ich mir die 4.4.5 nicht angeschaut habe ... für die 4.5.2 alpha muss man auf jeden fall einiges umprogrammieren.

Salech
Beiträge: 89
Registriert: So 5. Dez 2004, 11:00
Kontaktdaten:

Beitrag von Salech » Di 22. Mär 2005, 10:50

da hab ich wohl zu früh gesagt – klappt perfekt!

1. in der config.php

Code: Alles auswählen

/* Start TreeLocation vrom Root Tree (set to 1) or get location from first category (set to 0) */
$cfg['mod_rewrite']['startfromroot'] = 1;
bei 1 läuft alles relativ perfekt – bei 0 was ich eigentlich will geht's gar nichts.

2. in der front_content.php
2.1 im Menü wird die 3. Ebene (bzw. die 4. da siehe oben):

Code: Alles auswählen

    var Menue_2_4_1 = new TPopMenu('xxx','5','a','/xxx/xxx/xxx/xxx/','xxx');
    Menue_2_4.Add(Menue_2_4_1);
nicht gefunden:
Not Found
The requested URL /xxx/xxx/xxx/xxx/ was not found on this server.
2.2 "Normale" InterneLinks:
werden im Moment so <a href="/"> zerhackt – sodass sie nicht mehr funktionieren.

Vince
Beiträge: 122
Registriert: So 6. Mär 2005, 12:53
Kontaktdaten:

Beitrag von Vince » Di 22. Mär 2005, 20:35

Hi,

hmm ... je weiter man in Contenido eindringt, desto öfter liegen Steine im Weg :wink:

Ich wollte ein simples mod-rewrite erzeugen mittels einiger oben genannter Codezeilen, weil das eigentlich für meine Belange reichen sollte.
Das funzt aber irgendwie nicht, es kommt immer ein ServerError500.

Eintrag in der Nav:

Code: Alles auswählen

$tpl->set('d', 'HREF', $sess->url($data['name'].'-'.$data['idcat'].'.html'));
Eintrag in der .htaccess:

Code: Alles auswählen

RewriteEngine On 
RewriteRule ^(.*)-([0-9]*).html$ /cms/front_content.php?idcat=$1&idart=$2 
RewriteRule ^(.*)-([0-9]*).html$ /cms/front_content.php?idcat=$1 
Da ich mich bisher noch nicht damit rumschlagen brauchte, kenn ich mich da auch kaum aus. Wo liegt das Prob? Wäre super, wenn mir da mal jemand die Zeilen richtig hinbastelt und die Änderungen kurz erklärt.

Danke euch, Vince

stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese » Mi 23. Mär 2005, 19:55

Salech hat geschrieben:da hab ich wohl zu früh gesagt – klappt perfekt!
2. in der front_content.php
2.1 im Menü wird die 3. Ebene (bzw. die 4. da siehe oben):

Code: Alles auswählen

    var Menue_2_4_1 = new TPopMenu('xxx','5','a','/xxx/xxx/xxx/xxx/','xxx');
    Menue_2_4.Add(Menue_2_4_1);
nicht gefunden:
Not Found
The requested URL /xxx/xxx/xxx/xxx/ was not found on this server.
hi, das mit den zu vielen ebenen habe ich momentan am eigenen leib gespürt - hatte nen flüchtigen denkfehler drinn, der einen das komplette mod rewrite zerhaut bei mehr als 2 ebenen.

bis ich das package geupdatet habe, gibts hier den bugfix:

öffne die datei functions.modrewrite.php in contenido/includes/
gehe zu zeile 124 und suche nach

Code: Alles auswählen

$arr_tmp2_cat_found[] = $arr_results_2["found"];
die muss so geschrieben werden:

Code: Alles auswählen

$arr_tmp2_cat_found[] = $arr_results_2["found"][0];


(also die [0] am ende des arrays hinzufügen, sonst werden leere catids übergeben)

das sollte zumindestens dein problem 1 und 2.1 lösen - vll. hat man ja glück und es löst auch gleich die 2.2 (ich schätze mal schon)

Gesperrt