Plugin Advanced Mod Rewrite für Contenido 4.8.x

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

Re: Plugin Advanced Mod Rewrite für Contenido 4.8.x

Beitrag von xmurrix » Di 23. Feb 2010, 18:18

funomat hat geschrieben:...
- Update von Contenido von 4.8.10 auf 4.8.12
- Update von AMR 0.4.x (?) auf 0.5.4 (musste aber das selbe machen wie smac http://forum.contenido.org/viewtopic.ph ... 30#p128691)
- Basehref ist gesetzt
- mr_test.php gibt überhaupt nichts aus, wird aber aufgerufen!!
- BESONDERHEIT: mod_rewrite ist nicht in einer .htaccess sondern direkt in der httpd.conf

Vor dem Update funktionierte AMR einwandfrei. Nach dem Update werden zwar die Links alle richtig umgeschrieben, allerdings lande ich immer auf der Startseite, wenn ich einen Link anklicke. Merkwürdig finde ich, dass obwohl die Basehref auf http://www.domain.tld/cms/ gesetzt ist ich trotzdem z.B. für die Verlinkung der CSS-Dateien href="/cms/css/style.css" angeben muss.

Kann mir da jemand weiter helfen? Wenn weitere Infos benötigt werden, einfach sagen welche benötigt werden...
Hallo,

auf welches Verzeichnis (DocumentRoot) zeigt der der VirtualHost, ist es auf der gleichen Ebene wie die cms/ oder in der cms/?

Die Kombination aus base-Href + Pfad zu den Ressourcen sollte korrekt sein. Bei dir ist es z. B. http://www.domain.tld/cms/ + /cms/css/style.css - Das passt so nicht.

Nimm mal die RewriteBase Anweisung aus der httpd.conf raus, die ist eigentlich für die Verwendung in einer .htaccess gedacht.

Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

funomat
Beiträge: 345
Registriert: Do 26. Feb 2004, 22:13
Wohnort: Neuss
Kontaktdaten:

Re: Plugin Advanced Mod Rewrite für Contenido 4.8.x

Beitrag von funomat » Di 23. Feb 2010, 18:28

Also, so sieht der gesamte Eintrag in der httpd.conf aus:

Code: Alles auswählen

<VirtualHost 123.456.7.89:80>
     ServerName www.grs-sim.de
     ServerAdmin b.orth@grs-sim.de
     DocumentRoot "/myHtdocs/"

	php_admin_value memory_limit 50M

     PHP_admin_value open_basedir 
/myHtdocs/:/var/tmp/:/opt/rz/php/lib/php/
     php_admin_value include_path 
.:/myHtdocs/:/opt/rz/php/lib/php/


     <Directory "/myHtdocs/"> #v
         AllowOverride AuthConfig Limit
         order allow,deny
         allow from all

#fuer Contenido

# Enable rewrite engine
# ---------------------
RewriteEngine on

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

# 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

# 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]

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

     </Directory>
</VirtualHost>
Wenn ich RewriteBase raus nehme funktioniert garnichts mehr! Das hatte ich schon versucht.

Merkwürdig ist auch, dass ich folgende Fehler in der errorlog habe:

Code: Alles auswählen

[23-Feb-2010 17:56:19] PHP Warning:  include_once() [<a href='function.include-once'>function.include-once</a>]: Unable to access /myHtdocs/contenido/plugins/mod_rewrite/includes/include.mod_rewrite_menu_top.php in /myHtdocs/contenido/main.php on line 289
[23-Feb-2010 17:56:19] PHP Warning:  include_once(/myHtdocs/contenido/plugins/mod_rewrite/includes/include.mod_rewrite_menu_top.php) [<a href='function.include-once'>function.include-once</a>]: failed to open stream: Datei oder Verzeichnis nicht gefunden in /myHtdocs/contenido/main.php on line 289
[23-Feb-2010 17:56:19] PHP Warning:  include_once() [<a href='function.include'>function.include</a>]: Failed opening '/myHtdocs/contenido/plugins/mod_rewrite/includes/include.mod_rewrite_menu_top.php' for inclusion (include_path='.:/myHtdocs/pear/:/opt/rz/php/lib/php/:/myHtdocs/') in /myHtdocs/contenido/main.php on line 289
[23-Feb-2010 17:56:19] PHP Warning:  include_once() [<a href='function.include-once'>function.include-once</a>]: Unable to access /myHtdocs/contenido/plugins/mod_rewrite/includes/include.mod_rewrite_menu.php in /myHtdocs/contenido/main.php on line 289
[23-Feb-2010 17:56:19] PHP Warning:  include_once(/myHtdocs/contenido/plugins/mod_rewrite/includes/include.mod_rewrite_menu.php) [<a href='function.include-once'>function.include-once</a>]: failed to open stream: Datei oder Verzeichnis nicht gefunden in /myHtdocs/contenido/main.php on line 289
[23-Feb-2010 17:56:19] PHP Warning:  include_once() [<a href='function.include'>function.include</a>]: Failed opening '/myHtdocs/contenido/plugins/mod_rewrite/includes/include.mod_rewrite_menu.php' for inclusion (include_path='.:/myHtdocs/pear/:/opt/rz/php/lib/php/:/myHtdocs/') in /myHtdocs/contenido/main.php on line 289
Die mod_rewrite_menu_top.php gibt es nirgendwo mehr!
tiago.de | adk-msi.de | iseringhausen.de | the-iseringhausen.de
Manchmal glaube ich, der beste Beweis dafür, dass es anderswo im Weltall intelligentes Leben gibt, ist der, dass noch niemand versucht hat, Kontakt zu uns aufzunehmen. (Calvin & Hobbes)

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

Re: Plugin Advanced Mod Rewrite für Contenido 4.8.x

Beitrag von xmurrix » Di 23. Feb 2010, 19:05

Zur httpd.conf kann ich nicht viel sagen, da musst du etwas herumspielen, z. B. raus mit der RewriteBase und dafür

Code: Alles auswählen

RewriteRule !\.(js|ico|gif|jpg|jpeg|png|css|pdf)$ /cms/front_content.php

# oder
RewriteRule !\.(js|ico|gif|jpg|jpeg|png|css|pdf)$ cms/front_content.php
Vermutlich wird ein Administrator eher bei diesem Problem zu Lösung beitragen, die kennen sich besser mit den Feinheiten des Apachen und der httpd.conf aus.

Code: Alles auswählen

[23-Feb-2010 17:56:19] PHP Warning:  include_once() [<a href='function.include-once'>function.include-once</a>]: Unable to access /myHtdocs/contenido/plugins/mod_rewrite/includes/include.mod_rewrite_menu_top.php in /myHtdocs/contenido/main.php on line 289
Die Fehlermeldung kommt durch das Update des Plugins. Die "include.mod_rewrite_menu.php" wurde in früheren Versionen des Plugins verwendet, später ist sie rausgefallen. Habe es versäumt, die Bereinigung in die Updateroutine einzubauen. Wenn du willst, poste ich dir das SQL Statement zum Entfernen des Eintrags aus der DB, damit keine Fehler in der errorlog.txt erscheinen, wenn man im Backend die Pluginkonfiguration aufruft.

Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

funomat
Beiträge: 345
Registriert: Do 26. Feb 2004, 22:13
Wohnort: Neuss
Kontaktdaten:

Re: Plugin Advanced Mod Rewrite für Contenido 4.8.x

Beitrag von funomat » Di 23. Feb 2010, 20:53

Das SQL-Statement nehme ich gerne :)

Was genau macht den diese RewriteRule? Mit mod_rewrite kenne ich mich nicht wirklich gut aus. Da mache ich meistens alles nach dem try and error Princip :roll:
Das ist aber in diesem Fall nicht möglich, da ich nicht selber an der httpd.conf arbeiten kann.
tiago.de | adk-msi.de | iseringhausen.de | the-iseringhausen.de
Manchmal glaube ich, der beste Beweis dafür, dass es anderswo im Weltall intelligentes Leben gibt, ist der, dass noch niemand versucht hat, Kontakt zu uns aufzunehmen. (Calvin & Hobbes)

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

Re: Plugin Advanced Mod Rewrite für Contenido 4.8.x

Beitrag von xmurrix » Di 23. Feb 2010, 21:46

funomat hat geschrieben:Das SQL-Statement nehme ich gerne...

Code: Alles auswählen

-- aus der tabelle con_frame_files alte eintraege loeschen
DELETE FROM con_frame_files WHERE idfile IN (SELECT idfile FROM con_files WHERE filename = 'mod_rewrite/includes/include.mod_rewrite_menu_top.php' OR filename = 'mod_rewrite/includes/include.mod_rewrite_menu.php');

-- aus der tabelle con_files alte eintraege loeschen
DELETE FROM con_files WHERE idfile IN (SELECT idfile FROM con_files WHERE filename = 'mod_rewrite/includes/include.mod_rewrite_menu_top.php' OR filename = 'mod_rewrite/includes/include.mod_rewrite_menu.php');
Mach für alle Fälle eine Sicherung beider Tabellen. Habe das als Tabellenprefix "con_" angegeben, dies müsstest du eventuell anpassen.
funomat hat geschrieben:...Was genau macht den diese RewriteRule? Mit mod_rewrite kenne ich mich nicht wirklich gut aus. Da mache ich meistens alles nach dem try and error Princip...
Diese Regel schreibt Anfragen, die nicht auf die in den runden Klammern angegebenen Dateienendungen passen, an die /cms/front_content.php durch.
Gibt man als RewriteBase /cms an, so wird in der Regel der Request an front_content.php umschrieben, ohne RewriteBase ist es dann die /cms/front_content.php. Da ich diesen Fall noch nie hatte, kann ich dir leider keine konkrete Lösung geben.

Folgende Dateien könntest du noch prüfen:
  • contenido/includes/config.chains.php:
  • contenido/plugins/mod_rewrite/includes/config.plugin.php
  • cms/front_content.php
Es kann sein, dass eine der Dateien beim Update nicht aktualisiert wurde und daher auf dem Server noch alte Versionen liegen. Das kann auch das Problem verursachen...

Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

funomat
Beiträge: 345
Registriert: Do 26. Feb 2004, 22:13
Wohnort: Neuss
Kontaktdaten:

Re: Plugin Advanced Mod Rewrite für Contenido 4.8.x

Beitrag von funomat » Mi 24. Feb 2010, 08:39

Hallo xmurrix,

vielen Dank für Deine schon legendäre Unterstützung :mrgreen:

Es war natürlich eine Datei die bei der Übermittlung über WebDav nicht richtig überschrieben wurde. Da kann man sich dann natürlich einen Wolf suchen... :!: :!:
Durch die Besonderheit mit der httpd.conf bin ich natürlich erstmal davon ausgegangen, dass der Fehler bzw. das Problem dort zu suchen ist :roll:

In diesem Fall war es die front_content.php. Falls jemand ein Freeware Tool für WebDav kennt, das besser ist als Naja von Keyphrene, dann immer her damit.

Nochmals vielen Dank für die schnelle Unterstützung.

Gruß,
funomat
tiago.de | adk-msi.de | iseringhausen.de | the-iseringhausen.de
Manchmal glaube ich, der beste Beweis dafür, dass es anderswo im Weltall intelligentes Leben gibt, ist der, dass noch niemand versucht hat, Kontakt zu uns aufzunehmen. (Calvin & Hobbes)

StSnake
Beiträge: 57
Registriert: Fr 10. Mär 2006, 17:46
Kontaktdaten:

Re: Plugin Advanced Mod Rewrite für Contenido 4.8.x

Beitrag von StSnake » Sa 27. Feb 2010, 19:02

Hallo,

nach dem Update von AMR auf die aktuelle Version erhalte ich beim anlegen einer neuen Kategorie folgenden Fehler:

PHP Catchable fatal error: Argument 1 passed to mr_strNewTree() must be an array, integer given in /kunden/xxx/yyy/cms/contenido/plugins/mod_rewrite/includes/functions.mod_rewrite.php on line 39

Die Kategorie ist dann trotzdem angelegt.

Kann sich das jemadn erklären?

Vielen Dank schon einmal
Steffen

EDIT:
Der Fehler kommt auch beim anlegen eines Artikels.

dosenbrot
Beiträge: 102
Registriert: Fr 27. Aug 2004, 15:37
Kontaktdaten:

"?error=1" entfernen?

Beitrag von dosenbrot » So 28. Feb 2010, 16:09

Hallo liebe Leute,

ich nutze Contenido 4.8.11 und AMR 0.5.3 und danke für das tolle Plugin.

Mich stört jedoch, dass hinter der Fehlerseite immer ein "?error=1" angefügt wird, Beispiel: domain.tpl/404.html?error=1
Gibt es eine Möglichkeit, das "?error=1" auszulassen, wenn ja wie?

Leider habe ich über die Forensuche keinen entsprechenden Treffer finden können (da alleine Zeichen wie ? und = hier nicht mitgesucht werden).

Ich freue mich über Lösungen. Danke! :-)

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

Re: Plugin Advanced Mod Rewrite für Contenido 4.8.x

Beitrag von xmurrix » So 28. Feb 2010, 18:18

StSnake hat geschrieben:...
nach dem Update von AMR auf die aktuelle Version erhalte ich beim anlegen einer neuen Kategorie folgenden Fehler:

PHP Catchable fatal error: Argument 1 passed to mr_strNewTree() must be an array, integer given in /kunden/xxx/yyy/cms/contenido/plugins/mod_rewrite/includes/functions.mod_rewrite.php on line 39...
Welche Contenido Version verwendest du?

Das kann passieren, wenn beim Anlegen einer neuen Kategorie (oder auch eines Artikels), mehrere Chain-Fuktionen verarbeitet werden. Gibt es außer dem AMR-Plugin noch andere Plugins, die eigene Chainfunktionen in folgenden Chains ausführen?
- Contenido.Action.str_newtree.AfterCall
- Contenido.Action.con_saveart.AfterCall

Die Chainbehandlung verursacht leider noch Probleme, wenn einer Chain mehrere Chain-Funktionen registriert werden, dies ist in der nächsten Contenido-Version hoffentlich und endgültig behoben.
Die Ursache kann aber auch eine Registrierte Chainfunktion sein, die in beiden Fällen ein Array als bekommt aber kein Array zurückliefert.

Sind die Chainfunktionen in Ordnung und die Ursache liegt in der Chainbehandlung, also im Aufruf von CEC_Hook::execute(), dann kannst du das um gehen, indem du auf die alte Variante der Chainbehandlung umsteigst. Beide Chains kommen im Code vor, der in der DB-Tabelle con_actions ist (sofern con_ das Präfix der Tabellen bei dir ist). Mit folgenden 2 SQL Statements werden die betroffenen Datensätze geändert:

Code: Alles auswählen

UPDATE `con_actions` 
SET `code` = '$tmp_newid = strNewTree($categoryname, $categoryalias, $visible, $public, $idtplcfg);\r\nstrRemakeTreeTable();\r\n/*\r\n$cecHookRes = CEC_Hook::execute("Contenido.Action.str_newtree.AfterCall", array(\r\n    ''newcategoryid'' => $tmp_newid,\r\n    ''categoryname''  => $categoryname, \r\n    ''categoryalias'' => $categoryalias, \r\n    ''visible''       => $visible, \r\n    ''public''        => $public, \r\n    ''idtplcfg''      => $idtplcfg,\r\n));\r\n*/\r\n$newTreeData = array(\r\n    ''newcategoryid'' => $tmp_newid,\r\n    ''categoryname''  => $categoryname, \r\n    ''categoryalias'' => $categoryalias, \r\n    ''visible''       => $visible, \r\n    ''public''        => $public, \r\n    ''idtplcfg''      => $idtplcfg,\r\n);\r\n$_cecIterator = $_cecRegistry->getIterator("Contenido.Action.str_newtree.AfterCall");\r\nif ($_cecIterator->count() > 0) {\r\n    while ($chainEntry = $_cecIterator->next()) {\r\n        $tempNewTreeData = $chainEntry->execute($newTreeData);\r\n        if (is_array($tempNewTreeData)) {\r\n            $newTreeData = $tempNewTreeData;\r\n        }\r\n    }\r\n}\r\nunset($newTreeData);'
WHERE `idaction` = 9;

UPDATE `con_actions` 
SET `code` = 'if (!isset($idtpl))\r\n{\r\n  $idtpl = false;\r\n}\r\n\r\nif (!isset($artspec))\r\n{\r\n  $artspec = "";\r\n}\r\n\r\nif (!isset($online))\r\n{\r\n  $online = false;\r\n}\r\n\r\nif (isset($title)) \r\n{\r\n	\r\n	if (1 == $tmp_firstedit) \r\n	{\r\n	\r\n		$idart = conEditFirstTime($idcat, $idcatnew, $idart, $is_start, $idtpl, $idartlang, $lang, $title, $summary, $artspec, $created, $lastmodified, $author, $online, $datestart, $dateend, $artsort);\r\n		$tmp_notification = $notification->returnNotification("info", i18n("Changes saved"));\r\n		\r\n		if ( !isset($idartlang) ) \r\n		{\r\n			$sql = "SELECT idartlang FROM ".$cfg["tab"]["art_lang"]." WHERE idart = $idart AND idlang = $lang";\r\n			$db->query($sql);\r\n			$db->next_record();\r\n			$idartlang = $db->f("idartlang");\r\n		}\r\n		\r\n		if ( in_array($idcat, $idcatnew) ) \r\n		{\r\n		\r\n			$sql = "SELECT idcatart FROM ".$cfg["tab"]["cat_art"]." WHERE idcat = ''".$idcat."'' AND idart = ''".$idart."''";\r\n			\r\n			$db->query($sql);\r\n			$db->next_record();\r\n			\r\n			$tmp_idcatart = $db->f("idcatart");\r\n			\r\n			if ( $is_start == 1 ) \r\n			{\r\n				conMakeStart($tmp_idcatart, $is_start);\r\n			}\r\n			\r\n			if (!isset($is_start))\r\n			{\r\n				if ($cfg["is_start_compatible"] == true)\r\n				{\r\n				\r\n					$sql = "SELECT * FROM ".$cfg["tab"]["cat_art"]." WHERE idcat = ''$idcat'' AND is_start = ''1'' ";\r\n					$db->query($sql);\r\n					if ( $db->next_record() ) \r\n					{\r\n						; \r\n					}else\r\n					{\r\n						conMakeStart($tmp_idcatart, 0);\r\n					}\r\n					\r\n				}else\r\n				{\r\n				\r\n					$sql = "SELECT * FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat = ''$idcat'' AND idlang = ''$lang'' AND startidartlang != ''0'' ";\r\n					$db->query($sql);\r\n					if ( $db->next_record() ) \r\n					{\r\n						$tmp_startidartlang = $db->f(''startidartlang'');\r\n						if ($idartlang == $tmp_startidartlang)\r\n						{\r\n							conMakeStart($tmp_idcatart, 0);\r\n						}else\r\n						{\r\n							; # do nothing\r\n						}\r\n						\r\n					}else\r\n					{\r\n						conMakeStart($tmp_idcatart, 0);\r\n					}\r\n					\r\n				}\r\n			}\r\n			\r\n		}\r\n	\r\n		if ( is_array($idcatnew) ) \r\n		{\r\n		\r\n			foreach ( $idcatnew as $idcat ) \r\n			{\r\n			\r\n				$sql = "SELECT idcatart FROM ".$cfg["tab"]["cat_art"]." WHERE idcat = $idcat AND idart = $idart";\r\n				\r\n				$db->query($sql);\r\n				$db->next_record();\r\n				\r\n				conSetCodeFlag( $db->f("idcatart") );\r\n			\r\n			}\r\n		}\r\n	\r\n	}	\r\n	else \r\n	{\r\n	\r\n		conEditArt($idcat, $idcatnew, $idart, $is_start, $idtpl, $idartlang, $lang, $title, $summary, $artspec, $created, $lastmodified, $author, $online, $datestart, $dateend, $artsort);\r\n		\r\n		$tmp_notification = $notification->returnNotification("info", i18n("Changes saved"));\r\n		\r\n		if ( !isset($idartlang) ) \r\n		{\r\n			$sql = "SELECT idartlang FROM ".$cfg["tab"]["art_lang"]." WHERE idart = $idart AND idlang = $lang";\r\n			$db->query($sql);\r\n			$db->next_record();\r\n			$idartlang = $db->f("idartlang");\r\n		}\r\n		\r\n		if ( is_array($idcatnew) ) \r\n		{\r\n			if ( in_array($idcat, $idcatnew) ) \r\n			{\r\n			\r\n				$sql = "SELECT idcatart FROM ".$cfg["tab"]["cat_art"]." WHERE idcat = ''".$idcat."'' AND idart = ''".$idart."''";\r\n				\r\n				$db->query($sql);\r\n				$db->next_record();\r\n				\r\n				$tmp_idcatart = $db->f("idcatart");\r\n				\r\n				if ( $is_start == 1 ) \r\n				{\r\n					conMakeStart($tmp_idcatart, $is_start);\r\n				}\r\n				\r\n				if (!isset($is_start))\r\n				{\r\n					if ($cfg["is_start_compatible"] == true)\r\n					{\r\n					\r\n						$sql = "SELECT * FROM ".$cfg["tab"]["cat_art"]." WHERE idcat = ''$idcat'' AND is_start = ''1'' ";\r\n						$db->query($sql);\r\n						if ( $db->next_record() ) \r\n						{\r\n							; \r\n						}else\r\n						{\r\n							conMakeStart($tmp_idcatart, 0);\r\n						}\r\n						\r\n					}else\r\n					{\r\n					\r\n						$sql = "SELECT * FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat = ''$idcat'' AND idlang = ''$lang'' AND startidartlang != ''0'' ";\r\n						$db->query($sql);\r\n						if ( $db->next_record() ) \r\n						{\r\n							$tmp_startidartlang = $db->f(''startidartlang'');\r\n							if ($idartlang == $tmp_startidartlang)\r\n							{\r\n								conMakeStart($tmp_idcatart, 0);\r\n							}else\r\n							{\r\n								; # do nothing\r\n							}\r\n							\r\n						}else\r\n						{\r\n							conMakeStart($tmp_idcatart, 0);\r\n						}\r\n						\r\n					}\r\n					\r\n				}\r\n			}\r\n		}\r\n		\r\n		if ( is_array($idcatnew) ) \r\n		{\r\n		\r\n			foreach ( $idcatnew as $idcat ) \r\n			{\r\n			\r\n				$sql = "SELECT idcatart FROM ".$cfg["tab"]["cat_art"]." WHERE idcat = $idcat AND idart = $idart";\r\n				\r\n				$db->query($sql);\r\n				$db->next_record();\r\n				\r\n				conSetCodeFlag( $db->f("idcatart") );\r\n				\r\n			}\r\n		}\r\n	}\r\n}\r\n\r\n/*\r\n$cecHookRes = CEC_Hook::execute("Contenido.Action.con_saveart.AfterCall", array(\r\n    ''idcat''        => $idcat, \r\n    ''idcatnew''     => $idcatnew, \r\n    ''idart''        => $idart, \r\n    ''is_start''     => $is_start, \r\n    ''idtpl''        => $idtpl, \r\n    ''idartlang''    => $idartlang, \r\n    ''lang''         => $lang, \r\n    ''title''        => $title, \r\n    ''urlname''      => $urlname,\r\n    ''summary''      => $summary, \r\n    ''artspec''      => $artspec, \r\n    ''created''      => $created, \r\n    ''lastmodified'' => $lastmodified, \r\n    ''author''       => $author, \r\n    ''online''       => $online, \r\n    ''datestart''    => $datestart, \r\n    ''dateend''      => $dateend, \r\n    ''artsort''      => $artsort\r\n));\r\n*/\r\n$artData = CEC_Hook::execute("Contenido.Action.con_saveart.AfterCall", array(\r\n    ''idcat''        => $idcat, \r\n    ''idcatnew''     => $idcatnew, \r\n    ''idart''        => $idart, \r\n    ''is_start''     => $is_start, \r\n    ''idtpl''        => $idtpl, \r\n    ''idartlang''    => $idartlang, \r\n    ''lang''         => $lang, \r\n    ''title''        => $title, \r\n    ''urlname''      => $urlname,\r\n    ''summary''      => $summary, \r\n    ''artspec''      => $artspec, \r\n    ''created''      => $created, \r\n    ''lastmodified'' => $lastmodified, \r\n    ''author''       => $author, \r\n    ''online''       => $online, \r\n    ''datestart''    => $datestart, \r\n    ''dateend''      => $dateend, \r\n    ''artsort''      => $artsort\r\n));\r\n$_cecIterator = $_cecRegistry->getIterator("Contenido.Action.con_saveart.AfterCall");\r\nif ($_cecIterator->count() > 0) {\r\n    while ($chainEntry = $_cecIterator->next()) {\r\n        $tempArtData = $chainEntry->execute($artData);\r\n        if (is_array($tempArtData)) {\r\n            $artData = $tempArtData;\r\n        }\r\n    }\r\n}\r\nunset($artData);'
WHERE `idaction` = 55;
Mach aber vorher eine Sicherung der Tabelle con_actions. Die Änderungen habe ich nicht 100% gestestet, solte aber funktionieren...

Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

StSnake
Beiträge: 57
Registriert: Fr 10. Mär 2006, 17:46
Kontaktdaten:

Re: Plugin Advanced Mod Rewrite für Contenido 4.8.x

Beitrag von StSnake » So 28. Feb 2010, 18:27

Hallo,

vielen Dnak für deine Antwort, ch verwende die 4.8.12 er Version von contenido und habe nur AMR dazuinstalliert. Der Rest ist noch original.

Viele Grüße
Steffen

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

Re: "?error=1" entfernen?

Beitrag von xmurrix » So 28. Feb 2010, 18:29

dosenbrot hat geschrieben:...ich nutze Contenido 4.8.11 und AMR 0.5.3 und danke für das tolle Plugin.

Mich stört jedoch, dass hinter der Fehlerseite immer ein "?error=1" angefügt wird, Beispiel: domain.tpl/404.html?error=1
Gibt es eine Möglichkeit, das "?error=1" auszulassen, wenn ja wie?...
Hallo dosenbrot,

das lässt sich nicht "wegkonfigurieren", aber mit einer Änderung in der Datei "front_content.php" im Mandantenverzeichnis (in der Regel cms/) , kriegst du das hin. Die Zeilen ab ca. 292 von

Code: Alles auswählen

$aParams = array (
    'client' => $client, 'idcat' => $errsite_idcat[$client], 'idart' => $errsite_idart[$client], 
    'lang' => $lang, 'error'=> '1'
);
ersetzen gegen

Code: Alles auswählen

$aParams = array (
    'client' => $client, 'idcat' => $errsite_idcat[$client], 'idart' => $errsite_idart[$client], 
    'lang' => $lang
);
Danach erscheint der Parameter nicht mehr.

Alternativ kannst du das auch in der buildUrl() Methode der Klasse Contenido_UrlBuilder_MR (Die Datei findest du in contenido/classes/UrlBuilder/Contenido_UrlBuilder_MR.class.php) abfangen. Am Anfang der Funktion einfach folgende Zeilen einbauen:

Code: Alles auswählen

if (isset($params['error'])) {
    global $client, $errsite_idart;
    if (isset($params['idart']) && $params['idart'] == $errsite_idart[$client]) {
        unset($params['error']);
    }
}
Beides ist nicht ideal, da die Änderungen nach einem Update weg sind...

Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

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

Re: Plugin Advanced Mod Rewrite für Contenido 4.8.x

Beitrag von xmurrix » So 28. Feb 2010, 18:57

StSnake hat geschrieben:...vielen Dnak für deine Antwort, ch verwende die 4.8.12 er Version von contenido und habe nur AMR dazuinstalliert. Der Rest ist noch original...
Gab es eventuell vorher irgendwelche Updates, z. B. Update der Contenidoversion oder des AMR-Plugins?

Konnte das von dir beschriebene Verhalten nicht reproduzieren, auf einer frisch installierten Contenido 4.8.12 mit dem AMR-Plugin 0.5.5 funktioniert alles wunderbar.

Vielleicht wird die Pluginkonfiguration plugins/mod_rewrite/includes/config.plugin.php mehrfach eingebunden, ist das der Fall, werden die CEC-Funktionen dann natürlich mehrfach registriert, was auh das Verhalten erklären kann. Du müsstest das eventuell mal debuggen.

Schreibe am Ende der Konfigdatei folgende Zeilen rein:

Code: Alles auswählen

$logfile = $cfg["path"]["contenido"]."logs/mrlog.txt";
$trace = date('Ymd His') . ': ' . print_r(debug_backtrace(), true);
file_put_contents($logfile, $trace, FILE_APPEND);
unset($logfile, $trace);
Damit sollten in contenido/logs/mrlog.txt eine detaillierte Informationen zum Aufruf der Config-Datei gespeichert werden. Vielleicht gibt das Aufschluss darüber, wie oft und von wo aus die Pluginkonfiguration eingebunden wird.

Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

StSnake
Beiträge: 57
Registriert: Fr 10. Mär 2006, 17:46
Kontaktdaten:

Re: Plugin Advanced Mod Rewrite für Contenido 4.8.x

Beitrag von StSnake » Mo 1. Mär 2010, 08:24

Hallo,

vielen Dnak für deine Hilfe. Da bekomme ich eine ziemlich lange Log-Datei, mit der ich leider nicht wirklich viel Anfangen kann. Dürfte ich dir die mal per Email schicken?

Viele Grüße
Steffen

Rincewind
Beiträge: 54
Registriert: Di 20. Feb 2007, 14:10
Kontaktdaten:

Re: Plugin Advanced Mod Rewrite für Contenido 4.8.x

Beitrag von Rincewind » Mi 3. Mär 2010, 08:52

Hallo Contenido-Gemeinde,
ich habe ein Contenido 4.8.12 auf dem Webserver installiert und auch wunderbar ans laufen bekommen. Ich musste zwischenzeitlich eine index davor schalten weil die seite offiziell veröffentlicht werden soll.
Das ist nun soweit, und ich wollte die Änderungen wieder runternehmen, aber die htaccess des ModRewrites leitet die Anfrage so um das sie nicht beantwortet werden kann.

Ich versteh das ehrlich gesagt jetzt nicht, bin aber auch kein Spezialist.

Hier mein Code aus der htacess:

Code: Alles auswählen

###############################################################################
# Contenido AMR plugin restrictive rewrite rules set
#
# Contains strict rules, each rewrite exclusion must be set manually.
#
# - Exclude requests to directories usage/, contenido/, setup/, cms/upload/
# - Exclude requests to cms/front_content.php
# - Pass thru requests to common ressources (pics, js, css, pdf)
#
###############################################################################


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

<IfModule mod_rewrite.c>

# Enable rewrite engine
# ---------------------
RewriteEngine on


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


# 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


# Exclude some files and directories from rewriting
# -------------------------------------------------
RewriteRule ^index.html.*$ - [L]
RewriteRule ^bibliothek/.*$ - [L]
RewriteRule ^usage/.*$ - [L]
RewriteRule ^contenido/.*$ - [L]
RewriteRule ^setup/.*$ - [L]
RewriteRule ^cms/upload/.*$ - [L]
RewriteRule ^cms/test/.*$ - [L]
RewriteRule ^cms/front_content.php.*$ - [L]
RewriteRule ^cms/includes/captcha/image.php.*$ - [L]
RewriteRule ^mysqldumper/.*$ - [L]
RewriteRule ^sonstiges/.*$ - [L]
RewriteRule ^bilder/.*$ - [L]
RewriteRule ^forum/.*$ - [L]
RewriteRule ^extern/.*$ - [L]
# enable following line if you want to run the plugin test
RewriteRule ^cms/mr_test.php.*$ - [L]


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


</IfModule>
Wo liegt der Bock ?
Ich habe es auch schon über eine Weiterleitung probiert (d.h. über htaccess, php und meta-refresh) .. das ergebnis ist immer das selbe :/

Ich hoffe von euch sieht jemand den Fehler.

Viele Grüße

Rincewind

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

Re: Plugin Advanced Mod Rewrite für Contenido 4.8.x

Beitrag von xmurrix » Mi 3. Mär 2010, 13:33

Rincewind hat geschrieben:...Das ist nun soweit, und ich wollte die Änderungen wieder runternehmen, aber die htaccess des ModRewrites leitet die Anfrage so um das sie nicht beantwortet werden kann.
...
Wo liegt der Bock ?
Ich habe es auch schon über eine Weiterleitung probiert (d.h. über htaccess, php und meta-refresh) .. das ergebnis ist immer das selbe :/
...
Hallo Ricewind,

wo liegt das Documentroot des virtual-Hosts, ist das Mandantenverzeichnis das Documentroot?

Wo hast du die .htaccess abgelegt und wie ist die Konfiguration des Plugins (z. B. Pfad zur .htaccess)?


Sofern Apache richtig konfiguriert ist, und du Contenido sowie das Plugin ganz normal installiert hast (Contenido Installationsordner ist das Documentroot, Mandantenverzeichnis ist cms/, also eine Ebene unter Documentroot, die .htaccess liegt im Documentroot) , sollte es keine Probleme geben.
Beispiel:

Code: Alles auswählen

// Documentroot ist /var/www/mydomain/
/var/www/mydomain/
    cms/
    conlib/
    contenido/
    .htaccess
Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

Gesperrt