Plugin Advanced Mod Rewrite für Contenido 4.8.x

xmurrix
Beiträge: 3149
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Beitrag von xmurrix » Di 13. Jan 2009, 15:08

lunsen_de hat geschrieben:...
Wird das in der naechsten Version (MR für 4.8.10) drin sein, oder muss ich den Code beim updaten nachträglich einbauen?...
Das ist ein Bug und wird in der nächsten Version (hoffentlich) behoben sein. Danke für die Mithilfe.

Gruß
xmurrix

Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

RewriteRule für bestehende Dateien/Verzeichnisse?

Beitrag von Dodger77 » Di 13. Jan 2009, 16:55

Hallo Murat,

aktuell müssen ja bestehende Verzeichnisse/Dateien explizit in der .htaccess (Beispiel aus der Version 0.5.1) vom Umschreiben ausgenommen werden:

Code: Alles auswählen

# Exclude some files and directories from rewriting
# -------------------------------------------------
RewriteRule ^usage/.*$ - [L]
RewriteRule ^contenido/.*$ - [L]
RewriteRule ^setup/.*$ - [L]
RewriteRule ^cms/upload/.*$ - [L]
RewriteRule ^cms/test/.*$ - [L]
RewriteRule ^cms/front_content.php.*$ - [L]
# enable following line if you want to run the plugin test
#RewriteRule ^cms/mr_test.php.*$ - [L]
Später wird dann dafür gesorgt, dass CSS-, Javascript-Dateien usw. überhaupt nicht umgeschrieben werden sollen:

Code: Alles auswählen

# One RewriteRule to rule them all
# --------------------------------
RewriteRule !\.(js|ico|gif|jpg|jpeg|png|css|pdf)$ front_content.php [NC,QSA,L]
Ließe sich das nicht bedeutend einfacher mit (angelehnt an die .htaccess des ZF):

Code: Alles auswählen

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
erreichen?

xmurrix
Beiträge: 3149
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: RewriteRule für bestehende Dateien/Verzeichnisse?

Beitrag von xmurrix » Di 13. Jan 2009, 17:51

Hallo Ingo,
Dodger77 hat geschrieben:...
Ließe sich das nicht bedeutend einfacher mit (angelehnt an die .htaccess des ZF):

Code: Alles auswählen

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
erreichen?
ich glaube, diese Vorschlag hattest du schon mal gemacht, ich habe es leider nicht weiter verfolgt. Du hast vollkommen recht, es wäre wesentlich besser, da die .htaccess dadurch weitaus weniger Zeilen enthalten würde.

Dein Vorschlag lässt alle Requests auf existierende Dateien durch, bei der .htaccess, die es momentan gibt, muss man Dateien explizit freigeben, auch für andere HTML oder PHP Dateien, d. h. man kann ohne weiteres keine Seite unter /cms/templates oder ein Script unter /cms/includes aufrufen. HTML Seiten stellen kein Problem dar, der direkte Aufruf von PHP-Scripten sollte auch problemlos sein, da normalerweise auf korrekte Initialisierung (if(!defined('CON_FRAMEWORK')) {...}) überprüft wird.

Das soll keine Kritik sein, sondern nur eine Zuasmmenfassung von dem, was mir auf Anhieb zu diesem Thema einfällt.

Eigentlich sollte es also kein Problem sein, die Lösung von ZF wäre eine Alternative.

Gruß
Murat

Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Re: RewriteRule für bestehende Dateien/Verzeichnisse?

Beitrag von Dodger77 » Mi 14. Jan 2009, 15:59

xmurrix hat geschrieben:ich glaube, diese Vorschlag hattest du schon mal gemacht, ich habe es leider nicht weiter verfolgt. Du hast vollkommen recht, es wäre wesentlich besser, da die .htaccess dadurch weitaus weniger Zeilen enthalten würde.
Oh, sorry! Das ist mir wohl entfallen.
xmurrix hat geschrieben:Dein Vorschlag lässt alle Requests auf existierende Dateien durch, bei der .htaccess, die es momentan gibt, muss man Dateien explizit freigeben, auch für andere HTML oder PHP Dateien, d. h. man kann ohne weiteres keine Seite unter /cms/templates oder ein Script unter /cms/includes aufrufen. HTML Seiten stellen kein Problem dar, der direkte Aufruf von PHP-Scripten sollte auch problemlos sein, da normalerweise auf korrekte Initialisierung (if(!defined('CON_FRAMEWORK')) {...}) überprüft wird.

Das soll keine Kritik sein, sondern nur eine Zuasmmenfassung von dem, was mir auf Anhieb zu diesem Thema einfällt.
Da hast du natürlich recht. Ich dachte vor allem an die Vereinfachung der .htaccess (und somit weniger Supportanfragen), das explizite Ausschließen des mod_rewrite für einzelne Verzeichnisse bzw. Dateien ist natürlich in Sachen Sicherheit ("/cms/includes" kann da je nach verwendeten Scipts sicherlich problematisch sein) ein Vorteil.

malsdgtac
Beiträge: 717
Registriert: Fr 12. Mär 2004, 15:50
Kontaktdaten:

Beitrag von malsdgtac » Do 15. Jan 2009, 22:56

Vielen Dank vorneweg für das super Plugin. Ich habe es schon bei einigen Installationen verwendet, und überall funktionierte es einwandfrei.

Bei meiner jetzigen Installation habe ich allerdings ein seltsames Problem. Wenn ich das Mod_rewrite aktiviere, werden die Link umgeschrieben, allerdins werden die aliase der Kategorien nicht ergänzt.

Also bei "www.meinedomain.at/front_content...." ist das "front_content..." weg, aber dafür wird nichts ergänzt.

Hat jemand eine Idee?

Vielleicht sollte ich noch ergänzen, dass der Pfad, sowie Mandant und Sprache richtig angehängt wird. Es es sich um ein Contenido 4.8.9 mit der Pluginversion 0.5.1 handelt

xmurrix
Beiträge: 3149
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Beitrag von xmurrix » Do 15. Jan 2009, 23:50

Hallo smac,
smac hat geschrieben:...Bei meiner jetzigen Installation habe ich allerdings ein seltsames Problem. Wenn ich das Mod_rewrite aktiviere, werden die Link umgeschrieben, allerdins werden die aliase der Kategorien nicht ergänzt.

Also bei "www.meinedomain.at/front_content...." ist das "front_content..." weg, aber dafür wird nichts ergänzt.
...
dieses Verhalten ist mir in der Version unbekannt, wie sieht deine Pluginkonfiguration aus?

Könnte mir vorstellen dass eine bestimmte Konstellation des Konfiguration das verursacht.

Bekannte Probleme mit der Version 0.5.1 des Plugins gibt es bei der Erkennung der Sprache u. des Mandanten siehe Post 126873, die Lösung dazu - wahrscheinlich hast du es schon gelesen - gibt es unter Post 126888 und Post 126907.

Gruß
xmurrix

malsdgtac
Beiträge: 717
Registriert: Fr 12. Mär 2004, 15:50
Kontaktdaten:

Beitrag von malsdgtac » Fr 16. Jan 2009, 10:11

Also ich habe in der Konfiguration die verschiedensten Varianten ausprobiert.

Mit Sprache, mit Mandaten mit Dateiendung - das funktioniert alles. Nur die Kategoriealiase und Artikelaliase werden nicht ersetzt, statt dessen kommt nichts.

Vielleicht hängt es auch daran, dass es ursprünglich ne 4.4.4 war, die ich auf 4.8.9 geupdatet habe?

xmurrix
Beiträge: 3149
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Beitrag von xmurrix » Fr 16. Jan 2009, 10:59

smac hat geschrieben:...Vielleicht hängt es auch daran, dass es ursprünglich ne 4.4.4 war, die ich auf 4.8.9 geupdatet habe?...
Das ist aber sehr gewagt gewesen, von 4.4.4 auf 4.8.9 ist ein erheblicher Versionsprung :)

Es könnte sein, dass in den Tabellen die Felder fehlen oder nicht befüllt werden.
- In der {perfix}_art_lang sollte es ein Feld "urlname" geben
- In der {perfix}_cat_lang sollte es die Felder "urlname" und "urlpath" geben

Die {perfix}_cat_lang.urlpath wird vom Plugin neu hinzugefügt, die anderen Felder werden normalerweise vom Contenidosetup angelegt. Gibt es die Felder nicht, kannst du sie nachträglich hinzufügen.

Sind die Felder vorhanden, aber keine Inhalte drin, rufe die Funktion "Aliase zurücksetzen" auf der Konfigurationsseite des Plugins auf, dann sollten alle Aliase gesetzt werden.

Wenn das auch nichts bringt, steht eventuell etwas in der contenido/logs/errorlog.txt drin, das würde ich mir sogar schon vorher ansehen.

Gruß
xmurrix

malsdgtac
Beiträge: 717
Registriert: Fr 12. Mär 2004, 15:50
Kontaktdaten:

Beitrag von malsdgtac » Fr 16. Jan 2009, 12:46

das habe ich alles gecheckt.

im errorlog entsteht keine Fehlermeldung, die angegebenen Felder sind vorhanden und auch wenn ich vom "Hauptbaum" auswähle wird der urlpath geändert - das scheint alles richtig zu funktionieren.

Kann es eventuell daran liegen, dass ich im {prefix} einen Unterstrich habe?

xmurrix
Beiträge: 3149
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Beitrag von xmurrix » Fr 16. Jan 2009, 13:56

smac hat geschrieben:...
Kann es eventuell daran liegen, dass ich im {prefix} einen Unterstrich habe?...
Das glaube ich nicht, sonst würde gar nichts gehen.

Da muss irgendetwas noch fehlen, eventuell eine Konfiguration oder ein Script, dass beim Update nicht aktualisiert werden konnte.

Vieleicht liefert das Aktivieren des Debugging etwas. Öffne die Datei contenido/plugins/mod_rewrite/includes/config.plugin.php und aktiviere das Debugging mit:

Code: Alles auswählen

// set debug configuration
$options = array(
    'enable'                    => true, // enable debug
    'ressource_urls'            => array('/contenido/logs/errorlog.txt'),
    'dump_super_globals'        => array('$_GET', '$_POST', '$_COOKIE', '$_SESSION'),
    'ignore_empty_superglobals' => true
);
Die Debugausgabe (oben links) enthält viele Infos, die hilfreich sein können.

Interessant wäre z. B. die Info mit "ModRewriteUrlStack->_chunkSetPrettyUrlParts() $sql". Darin steht die das Select drin, das an die DB abgesetzt wird, um die Aliase zu holen.
Du kannst das Statement direkt abn die DB absetzen, um zu überprüfen, ob da überhaupt was kommt.

Die Debuginfo "Contenido_UrlBuilder_MR::buildUrl() in -> out" könntest du auch analysieren. Darin steht, welche Parameter reinkommen, und was da als generierte Url zurückgeliefert wird.

Gruß
xmurrix

gap
Beiträge: 55
Registriert: Mo 4. Apr 2005, 09:41
Kontaktdaten:

Re: htaccess Datei Fragen über Fragen

Beitrag von gap » Sa 17. Jan 2009, 15:27

xmurrix hat geschrieben: Wie ist es eigentlich, wenn du das Plugin deaktivierst und in der .htaccess die Zeile "RewriteEngine on" auf "RewriteEngine off" stellst, funktioniert

Code: Alles auswählen

# Enable following lines to run PHP5 on 1und1.de (1and1.com)
# ----------------------------------------------------------
#AddType x-mapp-php5 .php
#AddHandler x-mapp-php5 .php

AddType application/x-httpd-php3 .php3 

AddType application/x-httpd-php43 .php4 

AddType application/x-httpd-php5 .php .php5


<IfModule mod_rewrite.c>
RewriteEngine off

# Specify a base URL-path for the rules
# -------------------------------------
RewriteBase /


# Exclude some files and directories from rewriting
# -------------------------------------------------
RewriteRule ^usage/.*$ - [L]
RewriteRule ^contenido/.*$ - [L]
RewriteRule ^setup/.*$ - [L]
RewriteRule ^cms/upload/.*$ - [L]
RewriteRule ^cms/test/.*$ - [L]
RewriteRule ^cms/front_content.php.*$ - [L]
# enable following line if you want to run the plugin test
#RewriteRule ^cms/mr_test.php.*$ - [L]


# Catch some common exploits in query string to get rid of them
# NOTE: Conditions to prevent protocolls (ftp, http[s]) in query string could be a
#       disadvantage in some cases
# --------------------------------------------------------------------------------
RewriteCond %{QUERY_STRING} contenido_path=.*$  [NC,OR]
RewriteCond %{QUERY_STRING} cfg\[path\]=.*$  [NC,OR]
RewriteCond %{QUERY_STRING} _PHPLIB\[libdir\]=.*$  [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} ftp://.*$  [NC,OR] 
RewriteCond %{QUERY_STRING} http[s]*://.*$ [NC] 
RewriteRule ^.* - [F,L]  # all matching conditions from above will end in nirvana


# One RewriteRule to rule them all
# --------------------------------
RewriteRule !\.(js|ico|gif|jpg|jpeg|png|css|pdf)$ front_content.php [NC,QSA,L]

</IfModule>
Da passiert eigentlich überhaupt nichts ... ist das ein gutes oder schlechtes Zeichen ? Doch es passiert was ...ich kann zwar nich das Frontend sehen aber nicht das backend nur bei "RewriteEngine off" kann ich mich einloggen...

Contenido Version 4.8.9 und 2008-12-24: Advanced Mod Rewrite Plugin 0.5.1 (for Contenido 4.8.9) Danke - Vielen vielen Dank für Deine Hilfe

malsdgtac
Beiträge: 717
Registriert: Fr 12. Mär 2004, 15:50
Kontaktdaten:

Beitrag von malsdgtac » Sa 17. Jan 2009, 16:01

hallo xmurrix,

vielen Dank für deine Hilfe. Es lag wirklich an der Einstellung:

Code: Alles auswählen

$cfg["is_start_compatible"] = true; 
die war noch aus der alten Konfiguration vorhanden. Die Änderung in der config.php in /contenido/includes/ auf

Code: Alles auswählen

$cfg["is_start_compatible"] = false; 
war die Lösung.

Danach musste ich halt in jeder Kategorie einen Startartikel definieren, doch das ist ja kein großes Problem.

xmurrix
Beiträge: 3149
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: htaccess Datei Fragen über Fragen

Beitrag von xmurrix » Sa 17. Jan 2009, 19:46

gap hat geschrieben:...Da passiert eigentlich überhaupt nichts ... ist das ein gutes oder schlechtes Zeichen ? Doch es passiert was ...ich kann zwar nich das Frontend sehen aber nicht das backend nur bei "RewriteEngine off" kann ich mich einloggen...
Wenn du dich mit "RewriteEngine on" nicht einloggen kannst, musst du in der .htaccess eine Ausnahme für Requests auf "content/contenido/" definieren.

Code: Alles auswählen

RewriteRule ^content/contenido/.*$ - [L]
Ansonsten könnte es noch daran liegen, dass bei dir die Konfiguration $cfg["is_start_compatible"] = true; (siehe contenido/includes/config.php) gesetzt ist.
Das Plugin unterstützt diese Abwärtskompatibilität für die Behandlung der Startartikel in Kategorien nicht, wie es in älteren Contenido-Versionen der Fall war. Wenn dies bei dir so ist, müsstest du die $cfg["is_start_compatible"] auf false setzen und im Backend die Startartikel neu definieren.

Gruß
xmurrix

20082009
Beiträge: 116
Registriert: So 5. Okt 2008, 09:58
Kontaktdaten:

Re: htaccess Datei Fragen über Fragen

Beitrag von 20082009 » Mo 19. Jan 2009, 11:19

Hallo,
scheint ja ein tolles Plugin zu sein, leider läuft es bei mir nicht.
Contenido 4.8.8
Plugin 0.5.0

Sobald ich die .htaccess Datei auf den Server schiebe und Mod Rewrite aktiviere kommt "Webseite kann nicht angezeigt werden".

die .htaccess liegt im root Verzeichnis.



AddType x-mapp-php5 .php
AddHandler x-mapp-php5 .php

<IfModule mod_rewrite.c>
RewriteEngine on

# Specify a base URL-path for the rules
# -------------------------------------
RewriteBase /cms


# Exclude some files and directories from rewriting
# -------------------------------------------------
RewriteRule ^usage/.*$ - [L]
RewriteRule ^contenido/.*$ - [L]
RewriteRule ^setup/.*$ - [L]
RewriteRule ^cms/upload/.*$ - [L]
RewriteRule ^cms/test/.*$ - [L]
RewriteRule ^cms/index_controller.php.*$ - [L]
RewriteRule ^cms/front_content.php.*$ - [L]
# enable following line if you want to run the plugin test
#RewriteRule ^cms/mr_test.php.*$ - [L]


# Catch some common exploits in query string to get rid of them
# NOTE: Conditions to prevent protocolls (ftp, http[s]) in query string could be a
# disadvantage in some cases
# --------------------------------------------------------------------------------
RewriteCond %{QUERY_STRING} contenido_path=.*$ [NC,OR]
RewriteCond %{QUERY_STRING} cfg\[path\]=.*$ [NC,OR]
RewriteCond %{QUERY_STRING} _PHPLIB\[libdir\]=.*$ [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} ftp://.*$ [NC,OR]
RewriteCond %{QUERY_STRING} http[s]*://.*$ [NC]
RewriteRule ^.* - [F,L] # all matching conditions from above will end in nirvana


# One RewriteRule to rule them all
# --------------------------------
RewriteRule !\.(js|ico|gif|jpg|jpeg|png|css|pdf)$ index_controller.php [NC,QSA,L]

</IfModule>



Keine Ahnung was ich dort noch anpassen soll.

Im Rootverzeichnis liegt eine index.php mit diesem Inhalt:

<?php

header("Location: cms/front_content.php");

?>

Was muss ich noch einstellen?



Vielen Dank für eure Hilfe.

malsdgtac
Beiträge: 717
Registriert: Fr 12. Mär 2004, 15:50
Kontaktdaten:

Beitrag von malsdgtac » Mo 19. Jan 2009, 11:29

Das mit dem englischen Backend kam bei mir nur, als ich direkt nach der Installation ins Backend gewechselt bin. Einmal ausloggen und wieder (deutsch auswählen) einloggen, und es war wieder deutsch.

Die index.php kannst du grundsätzlich entfernen, weil das das Mod_Rewrite übernimmt. Wie hast du denn das Plugin konfiguriert?
Ist das Mod_Rewrite am Server richtig konfiguriert - ich glaub dafür gibt es sogar die mr_test.php zum Testen, hab ich aber noch nie ausprobiert.

Gesperrt